编程语言:C
我有两个DWORD:低和高。我想将它们转换为size_t类型的一个变量。我有以下代码:
size_t fileSize = fileSizeHigh;
size_t *pfileSize = &fileSize;
pfileSize[4] = fileSizeLow;
是这样的吗?我猜不是因为第一个命令可能将高字节存储在错误的位置,对吗?请帮我说明如何做到这一点。谢谢:)
答案 0 :(得分:2)
因此,在32位Microsoft系统上,DWORD
与size_t
的大小相同。这意味着您无法将两个DWORD
放入size_t
占用的空间中。
您的代码只会在fileSize
的末尾写入内存并且具有未定义的行为。它不会做你想要的。
你真正想要完成的是什么?你要完成的任务是什么?告诉我们,我们可以为您提供替代解决方案。
修改:正如@nos解释的那样,在64位系统上,size_t
可以容纳两个DWORD
。如果您使用的是64位系统,则可以使用位移组合两者:
size_t combined = ((size_t)high << 32) | (size_t)low; // 64-BIT WINDOWS ONLY
然而,这仍然有点代码味道,因为64位Windows目标上的操作与32位目标上的操作非常相似,所以看起来你仍然在做一些奇怪的事情原因。
答案 1 :(得分:0)
如果您正在编写64位代码,则size_t通常为64位。您需要在平台上验证这一点。 DWORD通常是32位,您也需要验证。给定32位DWORD和64位size_t,您可以这样做:
DWORD a = ...;
DWORD b = ...;
size_t c = (size_t)a << 32 | b;
如果您正在编写32位代码,将2个32位类型组合成另一个32位类型是没有意义的,size_t通常是32位代码中的32位。