我很难理解我是否在正确地做这件事,以及这是否是(唯一的)最佳解决方案。
我正在工作的项目使用三维数组来保存和使用大量数据。其中“数据”的一部分是DWORD类型的,我必须安全地进行DWORD / BYTE之间的转换。
BYTE(c风格)数组如下所示:
BYTE array_data[150][5][255] =
{
{
{ // bytes },
{ 0x74,0x21,0x54,0x00 }, // This is converted from DWORD like: 0x00542174
{ // bytes },
{ // bytes },
{ // bytes },
},
};
我找到的从DWORD转换为BYTE的唯一方法是:
DWORD dword_data;
char byte_array[4];
*(DWORD*)byte_array = dword_data; // byte_array becomes {0x74, 0x21, 0x54, 0x00}
wchar_t temp[256];
wsprintfW(temp, L"{0x%02x,0x%02x,0x%02x,0x%02x}, // This is converted from DWORD like: 0x%.8X\n", (BYTE)byte_array[0], (BYTE)byte_array[1], (BYTE)byte_array[2], (BYTE)byte_array[3], (DWORD)dword_data);
我理解DWORD是4个字节,所以char的最大长度为4。(如果我错了请纠正我?)
然后从BYTE转换回DWORD:
//Convert an array of four bytes into a 32-bit integer.
DWORD getDwordFromBytes(BYTE* b)
{
return (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
};
printf("dword_data: 0x%.8X\n", getDwordFromBytes(array_data[0][1]));
这将正常打印出:0x00542174。
所以我的问题是,这一切都正确和安全吗?因为我将有大量的数据在数组中,DWORD/BYTE转换对我来说至关重要,必须准确无误。
请建议并纠正我做错的地方,我非常感激!