我试图找到两个十六进制数字(57c9f63e& 16f77ed6)的产品(乘法)并将它们打印为无符号32位int,最后将该unsigned int转换回十六进制。
我有一个简短的python程序将十六进制转换为十进制,我想我需要将十六进制转换为十进制,然后乘以找到前面的项目。但是,我不知道从哪里开始,如果需要结构来完成这个。
任何指针都会非常感激。
答案 0 :(得分:0)
不需要转换 - 您可以读取十六进制或十进制格式的整数,进行乘法运算,然后以十六进制或十进制格式写出输出:
>>> 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输入是十六进制格式的必要条件。
答案 1 :(得分:0)
在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
。