我有一个十六进制数组,我想将其转换为十进制,进行模运算,然后将其转换回十六进制。
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}
这样与{}一起使用
答案 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)
。通常,如果num
长n
个字节,则答案是:
long i, r = 0;
for (i = 0; i < n; ++i)
{
r += (long)(num[i]) << (8*i);
}
当然,请确保num
适合long
(根据您的系统,通常为4或8个字节)。