乘以十六进制 > uint32> 回到十六进制
Multiply Hex > uint32> back to Hex
我试图找到两个十六进制数(57c9f63e 和 16f77ed6)的乘积(57c9f63e 和 16f77ed6)并将它们打印为无符号 32 位整数,最后将该无符号整数转换回十六进制。
我有一个简短的 python 程序可以将十六进制转换为十进制,我认为我需要将十六进制转换为十进制,然后相乘并找到前面的项目。但是,我不知道从哪里开始,也不知道是否需要结构来完成它。
任何指点将不胜感激。
无需转换 - 您可以读取十六进制或十进制格式的整数,进行乘法运算,然后以十六进制或十进制格式写入输出:
>>> x = input("Gimme a number in hex format: ")
Gimme a number in hex format: 0x57c9f63e
>>> y = input("Gimme a number in hex format: ")
Gimme a number in hex format: 0x16f77ed6
>>> z = y * x
>>> '%d %x' % (z, z)
'567517894676077524 7e03a84b3d85bd4'
>>> type(z)
<type 'int'>
当然这是 Python 2.4.2,而不是 3.x,所以输入可能会有所不同,尽管我很确定 3.x 做类似的事情。前导 0x
是告诉 Python 输入是十六进制格式所必需的。
在C语言中你可以使用十六进制数进行乘法运算。十六进制表示不会造成任何问题。 (0x
基本上是使它成为十六进制表示)。
代码会是这样的
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(){
uint32_t a = 0x57c9f63e ;
uint32_t b = 0x16f77ed6 ;
uint32_t res = a*b;
if( b && res/b != a){
printf("%s\n","overflow!!!" );
exit(1);
}
printf("0x%" PRIu32 "\n", res);
return 0;
}
是的,当我们使用 uint32_t
时会溢出。但是 uint64_t
可以保持结果。
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(){
uint64_t a = 0x57c9f63e ;
uint64_t b = 0x16f77ed6 ;
uint64_t res = a*b;
if( b && res/b != a){
printf("%s\n","overflow!!!" );
exit(1);
}
printf("0x%" PRIu64 "\n", res);
return 0;
}
给出结果,0x567517894676077524
。
我试图找到两个十六进制数(57c9f63e 和 16f77ed6)的乘积(57c9f63e 和 16f77ed6)并将它们打印为无符号 32 位整数,最后将该无符号整数转换回十六进制。
我有一个简短的 python 程序可以将十六进制转换为十进制,我认为我需要将十六进制转换为十进制,然后相乘并找到前面的项目。但是,我不知道从哪里开始,也不知道是否需要结构来完成它。
任何指点将不胜感激。
无需转换 - 您可以读取十六进制或十进制格式的整数,进行乘法运算,然后以十六进制或十进制格式写入输出:
>>> x = input("Gimme a number in hex format: ")
Gimme a number in hex format: 0x57c9f63e
>>> y = input("Gimme a number in hex format: ")
Gimme a number in hex format: 0x16f77ed6
>>> z = y * x
>>> '%d %x' % (z, z)
'567517894676077524 7e03a84b3d85bd4'
>>> type(z)
<type 'int'>
当然这是 Python 2.4.2,而不是 3.x,所以输入可能会有所不同,尽管我很确定 3.x 做类似的事情。前导 0x
是告诉 Python 输入是十六进制格式所必需的。
在C语言中你可以使用十六进制数进行乘法运算。十六进制表示不会造成任何问题。 (0x
基本上是使它成为十六进制表示)。
代码会是这样的
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(){
uint32_t a = 0x57c9f63e ;
uint32_t b = 0x16f77ed6 ;
uint32_t res = a*b;
if( b && res/b != a){
printf("%s\n","overflow!!!" );
exit(1);
}
printf("0x%" PRIu32 "\n", res);
return 0;
}
是的,当我们使用 uint32_t
时会溢出。但是 uint64_t
可以保持结果。
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(){
uint64_t a = 0x57c9f63e ;
uint64_t b = 0x16f77ed6 ;
uint64_t res = a*b;
if( b && res/b != a){
printf("%s\n","overflow!!!" );
exit(1);
}
printf("0x%" PRIu64 "\n", res);
return 0;
}
给出结果,0x567517894676077524
。