1

这个片段

unsigned char len_byte[4+1];
...
for(i=0; i < 4; i++) {
   printf("%02x ", len_byte[i]);
}

印刷

8a 00 00 00

我现在需要将一个整数值设置为 168 (0x000000a8)。同一个人可以帮助我吗?

谢谢大家,里卡多

编辑,我试过:

uint32_t len_dec=0; 
len_dec += (uint32_t)len_byte[0] | ((uint32_t)len_byte[1]<<8) | ((uint32_t)len_byte[2]<<16) | ((uint32_t)len_byte[3]<<24); 
printf("%" PRIu32 "\n",len_dec);
--> 4522130
4

1 回答 1

1

使用此代码,我得到 168 作为答案:

int main(void) {
    unsigned char len_byte[4] = {0x8a,0,0,0};
    unsigned int len_dec = 0;
    int i;
    for(i = 3; i >= 0; --i)
    {
        len_dec |= ((len_byte[i] >> 4) << (8*i)) | ((len_byte[i] & 0xF) << ((8*i) + 4));
    }

    printf("%lu\n", len_dec);
    return 0;
}

在这里测试

诀窍是将每个字节按 4 位分组。138 = 10001010 二进制。按 4 位分组,您有 2 组 :10001010. 现在你交换两个组:10101000得到 168。你对从数组的最后一个元素开始的每个字节执行此操作。

于 2013-11-11T22:04:41.853 回答