C缓冲区到int的转换

C缓冲区到int的转换,c,buffer,C,Buffer,这个片段 unsigned char len_byte[4+1]; ... for(i=0; i < 4; i++) { printf("%02x ", len_byte[i]); } 我现在需要将整数值设置为168(0x000000a8)。 sameone能帮我吗 感谢大家,, 里卡多 编辑,我试过: uint32_t len_dec=0; len_dec += (uint32_t)len_byte[0] | ((uint32_t)len_byte[1]<<8) |

这个片段

unsigned char len_byte[4+1];
...
for(i=0; i < 4; i++) {
   printf("%02x ", len_byte[i]);
}
我现在需要将整数值设置为168(0x000000a8)。 sameone能帮我吗

感谢大家,, 里卡多

编辑,我试过:

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
uint32长度dec=0;

len_dec+=(uint32_t)len_字节[0]|((uint32_t)len_字节[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;
}
int main(无效){
无符号字符长度字节[4]={0x8a,0,0,0};
无符号整数len_dec=0;
int i;
对于(i=3;i>=0;--i)
{

len_dec |=((len_字节[i]>>4)通过这段代码,我得到了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;
}
int main(无效){
无符号字符长度字节[4]={0x8a,0,0,0};
无符号整数len_dec=0;
int i;
对于(i=3;i>=0;--i)
{

len_dec|=((len_byte[i]>>4)将值读取为16位(短),循环跨距等于2字节。换句话说,将短指针设置为数组的开头,并将其增加一个(一次将跳跃2字节)。输入数据是否总是小端字节,并且总是4字节长?此外,您是“我尝试过了”附录很好,但也应该包括这项工作的结果。“它不起作用”并不多。然后确保在上述尝试装配期间的每个轮班之前,将每个
len_字节[n]
条目转换到
uint32_t
。即
((uint32_t)len_字节[1])@WhozCraig:edited post根据您的建议…要将0x8a000000转换为0x000000a8,您需要移动所有位;而不仅仅是字节。将循环步长设置为2字节时,将值读取为16位(短)。换句话说,将短指针设置为数组的开头,并将其增加1(一次将跳转2字节)。输入数据总是小尾端,并且总是4个字节长吗?此外,您的“我尝试过”附录很好,但也应该包括该努力的结果。“它不起作用”并不多。然后确保您铸造每个
len_字节[n]
在上面尝试的组装过程中,在每次轮班之前进入
uint32\u t
。即
((uint32\u t)len\u byte[1])@WhozCraig:edited post按照您的建议…要将0x8a00000转换为0x000000a8,您需要移动所有位;不仅是字节,而且他以“0x8a”开头。但他以“0x8a”开头。