我可能在这里非常错,所以请指出我可能有的任何误解或错误。
此赋值的输入是一些字符串,后跟一系列小端格式的4字节无符号整数。我将输入读入STL字符串,并使用substring函数将整数与新字符串隔离开来。
根据我的理解,最低有效位将从最左边的字节开始存储。二进制表示为(0000 0000 0000 0001 1111 1111 1111 1111)的无符号整数131071(dec)将被存储为1111 1111 1111 1111 0000 0001 0000 0000
一次解析这个新字符串4个字节,我认为第一个字节将包含值为0-255的位,第二个字节为256-65535,依此类推第3个和第4个字节。
我取第1个字节,将其转换为无符号整数,然后将其移位24位,我对第2个和第3个字节做了相同的操作,分别为16和8位移位。
我按预期为第1和第2个字节得到255和65535,但第3个字节为0。我相信我必须使用&操作员在某处,但我无法弄清楚在哪里。如果有人能给我一些建议,或者也许是一种不那么愚蠢的方式来完成同样的任务,我会非常感激。
答案 0 :(得分:3)
如果第3个字节的值为0,并且您的数据与您的描述相符,则代码中存在错误。以下代码将正确转换您的示例数据。
// Data from file
unsigned char Buffer[] = { 255, 255, 1, 0 };
// Convert the LSB data to an unsigned int
unsigned int Result = 0;
for (int i = 0; i < 4; ++i) {
Result |= static_cast<unsigned int>(Buffer[i]) << (i*8);
}