переносимый способ вставки DWORD в std :: vector of WORD - PullRequest
0 голосов
/ 30 октября 2019

Я наткнулся на следующий фрагмент кода, который вставляет 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

...