【发布时间】:2011-02-17 09:20:10
【问题描述】:
我在这里可能非常错误,所以请指出我可能有的任何误解或错误。
这个赋值的输入是一个由一些字符组成的字符串,后跟一系列小端形式的 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 个字节。
我取出第一个字节,将其转换为无符号整数,然后将其移位 24 位,我对第 2 和第 3 个字节做了相同的操作,除了分别移位 16 位和 8 位。
我得到了 255 和 65535 的第 1 和第 2 字节,但第 3 字节为 0。我相信我必须在某处使用 & 运算符,但我不知道在哪里。如果有人能给我一些建议,或者用一种不太愚蠢的方式来完成同样的任务,我将不胜感激。
【问题讨论】:
-
我认为我们需要查看一些代码来找出问题所在
-
"leftmost byte" 有点模棱两可。在我读过的关于微架构的手册中,地址总是向左增加。换句话说,最左边的字节是具有最高地址的字节。但我假设你把最左边的意思是“最低地址”。 (通常我对此并不迂腐,但在谈论字节序时左右有点重要)
-
它将被存储为 1111 1111 1111 1111 0001 0000 0000 0000。可能只是一个错字。
标签: c++ bitwise-operators endianness