乘以十六进制> UINT32>回到十六进制

时间:2017-12-02 02:26:53

标签: c python-3.x hex unsigned-integer

我试图找到两个十六进制数字(57c9f63e& 16f77ed6)的产品(乘法)并将它们打印为无符号32位int,最后将该unsigned int转换回十六进制。

我有一个简短的python程序将十六进制转换为十进制,我想我需要将十六进制转换为十进制,然后乘以找到前面的项目。但是,我不知道从哪里开始,如果需要结构来完成这个。

任何指针都会非常感激。

2 个答案:

答案 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