将DWORD插入WORD的std :: vector的可移植方法

时间:2019-10-30 13:55:39

标签: c++ vector endianness

我偶然发现了将DWORD值插入到std::vector<WORD>中的以下代码段:

std::vector<WORD> memdlg;

DWORD exStyle = 0;
memdlg.push_back(LOWORD(exStyle));
memdlg.push_back(HIWORD(exStyle));

DWORD style = DS_CENTER | WS_OVERLAPPEDWINDOW | WS_POPUP | WS_VISIBLE | DS_SETFONT;
memdlg.push_back(LOWORD(style));
memdlg.push_back(HIWORD(style));

我了解代码的作用,但是我认为这种方法似乎不是可移植的方式,因为先插入低字,然后再插入高字,这似乎意味着字节序少吗?我对这个假设是否正确?

例如对于大端机,它应该是相反的:

memdlg.push_back(HIWORD(style));  // high word first
memdlg.push_back(LOWORD(style));  // low word second

这是正确的吗?因为如果以后我们(或按索引访问向量内存的其他代码)想从向量中提取DWORD,该如何判断给定平台的排序是否正确?

顺便说一句。向量必须为WORD向量,因为调用代码只能与WORDS一起使用,而不是DWORDS

0 个答案:

没有答案