我的问题,我正在尝试将DWORD类型的动态内存转换为BYTE。我可以循环使用,并将每个条目的DWORD转换为BYTE。
但他们这样做的速度更快吗?获取指向DWORD数据的指针并将整个数据转换为指向BYTE数据的指针?比如使用memcpy操作?
我觉得这是不可能的,我不是仅仅就我的方法请求答案,因为我已尝试测试这两种方法,但似乎无法在我的第二种解决方案上找到解决方案。
感谢任何输入,再次没有答案只是朝着正确方向的一个点。这也不是一个家庭作业问题,我觉得必须提到。
答案 0 :(得分:5)
这实际上取决于你最终想要达到的目标。如果你有,例如:
DWORD *x;
x = new DWORD[100];
// x gets filled in somehow
你只想单独处理每个DWORD的每个字节,然后做一些你建议的事情(即使用例如memcpy)可能是一个选项。但是,您可以使用reinterpret_cast(例如
)将数组作为BYTE数组处理BYTE *y = reinterpret_cast<BYTE *>(x);
或类似的东西。
答案 1 :(得分:1)
如果您不关心可能交换字节顺序的字节顺序(如果您使用的是小端),则可以执行static_cast<BYTE*>(array_ptr)
,如果您关心字节顺序,则需要使用手前的字节交换(字节交换有x86 intrinsic)。
如果您需要副本,那么只需分配足够的空间并使用endian fixup执行memcpy
或复制循环。
答案 2 :(得分:0)
DWORD array[10];
BYTE* byteArray = array;
byteArray[0] ....
像这样?
答案 3 :(得分:-1)
如果DWORD和BYTE长度相同,那么是。否则,不,您需要单独调整每个元素的大小。