C 低和高DWORD=>;尺寸

C 低和高DWORD=>;尺寸,c,join,size-t,dword,C,Join,Size T,Dword,编程语言:C 我有两个字:一个低字和一个高字。我想把它们都转换成一个size\u t类型的变量。我有以下代码: size_t fileSize = fileSizeHigh; size_t *pfileSize = &fileSize; pfileSize[4] = fileSizeLow; 那样对吗?我猜不会,因为第一个命令可能将高位字节存储在错误的位置,对吗?请帮我做这个。谢谢:)因此,在32位Microsoft系统上,DWORD的大小与的大小相同。这意味着您不能将两个DWORDs

编程语言:C

我有两个字:一个低字和一个高字。我想把它们都转换成一个size\u t类型的变量。我有以下代码:

size_t fileSize = fileSizeHigh;
size_t *pfileSize = &fileSize;
pfileSize[4] = fileSizeLow;

那样对吗?我猜不会,因为第一个命令可能将高位字节存储在错误的位置,对吗?请帮我做这个。谢谢:)

因此,在32位Microsoft系统上,
DWORD
的大小与
的大小相同。这意味着您不能将两个
DWORD
s放入
size\u t
占用的空间中

您的代码只需在
fileSize
的末尾写入内存,并且具有未定义的行为。它不会做你想做的事

你到底想做什么?你想完成的任务是什么?告诉我们,我们可能会为您提供另一种解决方案

编辑:正如@nos所解释的,在64位系统上,一个
大小可以容纳两个
DWORD
s。如果您使用的是64位系统,则可以使用位移位将两者结合起来:

size_t combined = ((size_t)high << 32) | (size_t)low; // 64-BIT WINDOWS ONLY

size\u t combined=((size\u t)high如果您正在编写64位代码,则size\u t通常为64位。您需要在平台上验证这一点。DWORD通常为32位,您也需要验证这一点。给定32位DWORD和64位size\u t,您可以执行以下操作:

DWORD a = ...;
DWORD b = ...;
size_t c = (size_t)a << 32 | b;
dworda=。。。;
德沃德b=。。。;

size_t c=(size_t)a谢谢。是的,我使用的是64位系统(Win7 x64)。是否有一种大小为64位且独立于操作系统的大小的替代方法?
unsigned\u int64
是替代类型。但如果您告诉我们您正在尝试执行的操作,我们可能可以帮助您找到更好的方法。谢谢。我想读取文件的大小。要实现此目的,我首先使用CreateFile打开文件。然后我正在用GetFileSize读取大小。结果我得到了一个低DWORD和一个高DWORD。最后我想加入它们。(是的,我知道我的代码不可移植,因为我使用的是WinAPI)