0

我的问题,我正在尝试将 DWORD 类型的动态内存数组转换为 BYTE。很公平,我可以循环遍历这个并将 DWORD 转换为每个条目的 BYTE。

但他们是一种更快的方法吗?获取指向 DWORD 数据的指针并将整段数据转换为指向 BYTE 数据的指针?比如使用memcpy操作?

我觉得这是不可能的,我不是要求答案,只是对我的方法有经验的意见,因为我已经尝试过测试这两种方法,但似乎无法在我的第二个解决方案上找到解决方案。

感谢您的任何输入,再次没有答案,只是朝着正确的方向前进。这也不是一个家庭作业问题,我觉得必须提及。

4

4 回答 4

5

这实际上取决于您最终要达到的目标。如果你有,例如:

DWORD *x;
x = new DWORD[100];

// x gets filled in somehow

而且您只想单独处理每个 DWORD 的每个字节,然后执行您建议的操作(即使用例如 memcpy)可能是一种选择。但是,您可以使用 reinterpret_cast 将数组作为 BYTE 数组处理,例如

BYTE *y = reinterpret_cast<BYTE *>(x);

或类似的东西。

于 2012-09-28T15:31:01.513 回答
1

如果您static_cast<BYTE*>(array_ptr)不关心字节顺序,则可以这样做可能会交换字节顺序(如果您使用的是小字节序),如果您确实关心字节顺序,则需要事先进行字节交换(有一个x86 固有的字节交换)。

如果您需要一个副本,那么只需分配足够的空间并memcpy使用 endian fixup 执行一个或一个复制循环。

于 2012-09-28T15:28:52.217 回答
0
DWORD array[10];
BYTE* byteArray = array;
byteArray[0] ....

像这样?

于 2012-09-28T15:28:00.487 回答
-1

如果 DWORD 和 BYTE 长度相同,则可以。否则,不,您将需要单独调整每个元素的大小。

于 2012-09-28T15:28:07.937 回答