C++ 使用位移位运算符将DWORD转换为字节
我不能让它正常工作C++ 使用位移位运算符将DWORD转换为字节,c++,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) | (((DWOR
#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;
}
#包括
int main()
{
德沃德一世=6521;
字节优先=i>>32;
字节秒=i>>24;
第三字节=i>>16;
第四字节=i>>8;
i=((DWORD)第四个)我认为你的DWORD移位太多了。移位8位太多:)你的移位不太正确
字节优先=i>>24;
字节秒=i>24;
第三字节=i>24;
第四字节=i>24;
我所做的是将顶部字节下移24位,然后以8的增量上移以清除顶部位,并将下一个字节置于下移位置
您也可以将dword处的值作为4字节的字节数组(或结构)来读取,并让编译为您完成这项工作。虽然Neil的解决方案是正确的,但字节的顺序并不总是与您期望的顺序一致。您可能想看看“”如果您有这个问题除了移位过多的8位之外,您还以相反的顺序重建了i
(这可能是有意的)。最好对固定大小的整数类型使用uint32_t和uint8_t。呸,我的答案会运行得更快。少一个操作。在带有移位优化的ARM程序上更好:)@MichaelDorgan:您的操作更容易混淆,并且似乎是相同数量的操作。所以不要更快。如果您愿意,字节前移的位移位需要修复。
BYTE first = (i >> 24) & 0xff;
BYTE second = (i >> 16) & 0xff;
BYTE third = (i >> 8) & 0xff;
BYTE fourth = i & 0xff ;
BYTE first = i >> 24;
BYTE second = i << 8 >> 24;
BYTE third = i << 16 >> 24;
BYTE fourth = i << 24 >> 24;