此代码段
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
答案 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;
}
技巧是将每个字节分组为4位。 138 = 10001010二进制。按4位分组,您有两组:1000
和1010
。现在你交换两个组:10101000
,它给出了168.你对从数组的最后一个元素开始的每个字节执行此操作。