C语言 将 4 个字节转换为无符号整数



如果有一个字符数组,例如

char bytes[256]  = "10000011011110110010001101000011";

我想得到这个无符号的值,这将是:2205885251

我正在尝试按照这些思路做一些事情

unsigned int arr[256];
for(int i = 0, k=0; i<256; i++, k++)
{
arr[k] = bytes[i]|bytes[i+1]<<8|bytes[i+2]<<16|bytes[i+3]<<24;
}

我获得了错误的值:3220856520,谁能指出我做错了什么?

#include <stdio.h>
char bytes[256]  = "10000011011110110010001101000011";
int main(void)
{
    unsigned int out;
    int i;
    for (out = 0, i = 0; i < 32; ++i)
        if (bytes[31 - i] == '1')
          out |= (1u << i);
    printf("%un", out);
    return 0;
}

输出为:2205885251

#include <stdio.h>
int main()
{
    char bytes[256]  = "10000011011110110010001101000011";
    unsigned int value = 0;
    for(int i = 0; i< 32; i++)
    {
        value = value *2  + (bytes[i]-'0');
    }
    printf("%un",value);
}

它输出:2205885251

char bytes[]  = "10000011011110110010001101000011";
unsigned int k;
k = strtoul(bytes, NULL, 2);
printf("%u n", k);

瓦尔特

相关内容

最新更新