Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:什么';以字节为单位的文件大小使用的数据类型是否正确?_C_Types - Fatal编程技术网

C:什么';以字节为单位的文件大小使用的数据类型是否正确?

C:什么';以字节为单位的文件大小使用的数据类型是否正确?,c,types,C,Types,如果我使用类似于double的方法来保存以字节为单位的文件大小,那么很快就会失败,那么我会使用哪种数据类型呢?现在有两个TB是常见的,所以我希望数据类型能够容纳这么大的数字。long是流行的最爱:)大小\u t是C中文件大小的常见值,但它的类型取决于平台(Windows上的32位或64位无符号int)。我建议uu int64(一个64位的int)应该能够处理高达138547332terrabytes的数据 编辑:只要检查一下,Windows API调用GetFileSizeEx就会得到一个大整数

如果我使用类似于
double
的方法来保存以字节为单位的文件大小,那么很快就会失败,那么我会使用哪种数据类型呢?现在有两个TB是常见的,所以我希望数据类型能够容纳这么大的数字。

long
是流行的最爱:)

大小\u t是C中文件大小的常见值,但它的类型取决于平台(Windows上的32位或64位无符号int)。我建议uu int64(一个64位的int)应该能够处理高达138547332terrabytes的数据


编辑:只要检查一下,Windows API调用
GetFileSizeEx
就会得到一个大整数,它是一个64位有符号整数。这么大的整数也不错。

有一个名为
ftello()
的函数,它返回一个
off\t

使用
fgetpos()
,您需要一个
fpos\u t
变量-EDIT:它不一定是算术类型


因此,
off\u t
可以/应该适合您的需要,并使您独立于实际的数据类型大小。

您可能需要考虑使用
off\u t
,因为这是诸如和之类的标准函数所使用的。

这取决于您的平台。在Unix系统上,您可能可以使用
off\t
类型。在Windows上,您可能需要使用
LARGE\u INTEGER
。这些是返回文件大小的函数在这些系统上使用的类型(Unix上为
stat
,Windows上为
GetFileSize


如果您想要便携式类型,
uint64\u t
应该足够大。

libc
stat
使用
off\u t
,这是一种用于无符号、64位宽类型的typedef。这将适合一段时间。

根据记录,
size\u t
在64位构建中的大小为64位。它不是
unsigned int
,它是一种无符号整数类型。抱歉,@paxdiablo,正如您所暗示的,它实际上依赖于平台。在使用32位的Windows上,它相当于一个未签名的int。上次我相信Visual Studio告诉我的。:)我对我的答案进行了更精确的编辑。这里的更多信息:
size\t
在许多系统上不是正确的抽象,它是用来处理对象的大小的。在典型的32位系统上,这是一个32位的值,而您的文件可能比4GiB大得多。正确-“size\t”用于处理对象的大小,“off\t”用于处理文件的偏移量。在大多数现代I/O库中,“off\u t”转换为“long long”(64位无符号整数)。在快速的Google会话之后,看起来uint64\u t就是我想要的。谢谢回复的数量和回复的时间让我不知所措。太棒了@EnibMoc1994:您也可以使用
long
或其未签名的伙伴,保证至少为64位。请注意
ftello
off\u t
是Posix,而不是标准C。如果您没有
off\u t
您也没有
ftello
,并且没有(便携的)获取大于
long
…+1的文件偏移量的方法,因为它费心询问,而不仅仅是使用伪造的东西。:-)欢迎来到SO!off_t是OSX上签名长的typedef。