C缓冲区转换为int

时间:2013-11-11 21:32:52

标签: c buffer

此代码段

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

打印

8a 00 00 00

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

感谢所有人, 的Riccardo

编辑,我试过了:

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

1 个答案:

答案 0 :(得分: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;
}

Tested here

技巧是将每个字节分组为4位。 138 = 10001010二进制。按4位分组,您有两组:10001010。现在你交换两个组:10101000,它给出了168.你对从数组的最后一个元素开始的每个字节执行此操作。