DWORD到使用按位移位运算符的字节

时间:2010-04-22 17:52:17

标签: c++

我无法让它正常工作。

#include <windows.h>

int main()
{
    DWORD i  = 6521;

    BYTE first = i >> 32;
    BYTE second = i >> 24;
    BYTE third = i >> 16;
    BYTE fourth = i >> 8;

    i = (((DWORD)fourth) << 24) | (((DWORD)third) << 16) | (((DWORD)second) << 8) | first;
}

4 个答案:

答案 0 :(得分:13)

BYTE first = (i >> 24) & 0xff;
BYTE second = (i >> 16) & 0xff;
BYTE third = (i >> 8) & 0xff;
BYTE fourth = i & 0xff ;

答案 1 :(得分:2)

我认为你过多地转移你的DWORD。 8位过多:)

答案 2 :(得分:2)

你的转变不太正确。


BYTE first  = i         >> 24;
BYTE second = i <<  8   >> 24;
BYTE third  = i <<  16  >> 24;
BYTE fourth = i <<  24  >> 24;

我正在做的是将顶部字节向下移24,然后以8为增量向上移动以清除顶部位并将下一个字节放在适当位置以便向下移位。

您可以将dword中的值读取为4字节的字节数组(或结构)来执行此操作,并让编译为您完成工作。

答案 3 :(得分:1)

尽管Neil的解决方案是正确的,但字节并不总是按照您预期的顺序排列。如果您遇到问题,可能需要查看“endianess