如何将十六进制数组转换为十进制并在C中再次返回?

时间:2018-11-05 17:25:58

标签: c hex

我有一个十六进制数组,我想将其转换为十进制,进行模运算,然后将其转换回十六进制。

int main()
{
    char num[] = {0x02,0x03,0x04};
    long n = strtol(num, NULL, 16);
    printf("n=%ld\n", n);  
}

我在这里期望为“ 262914”时得到“ 0”。

编辑:

我知道放置char num[] = "0x040302"会给我带来预期的输出,但是它需要像{0x02,0x03,0x04}这样与{}一起使用

2 个答案:

答案 0 :(得分:0)

  

我知道将char num [] =“ 0x040302”可以给我期望的   输出,但需要像{0x02,0x03,0x04}一样使用{}

“ 0x040302”等效于{'0','x','0','4','0','3','0','2',0}, 或{假设使用ASCII码的{0x30、0x78、0x30、0x34、0x30、0x33、0x30、0x32、0x00}。

答案 1 :(得分:0)

答案只是num[0] + (num[1] << 8) + (num[2] << 16)。通常,如果numn个字节,则答案是:

long i, r = 0;

for (i = 0; i < n; ++i)
{
    r += (long)(num[i]) << (8*i);
}

当然,请确保num适合long(根据您的系统,通常为4或8个字节)。