2011-03-28 88 views
1

用于存储文件中字符索引的典型类型是什么?我目前使用long unsigned int,但这有意义吗?我应该用std::size_t来代替吗,还是这样做更没意义?文件索引

+0

什么是一个字符的索引? – 2011-03-28 12:23:28

+0

@Gunner第n个字符。所以如果我有一个带有字母的文件,'G'的索引是6. – Maxpm 2011-03-28 12:24:49

回答

2

正如Mike Seymor所说,如果您使用C++ io流,则std :: streampos是表示文件位置的标准类型。见

http://www.cplusplus.com/reference/iostream/streampos/

注意,标准::为size_t可能不正确。例如,在32位系统上,std :: size_t将是一个32位无符号整数,而系统可能支持大于2^32字节= 4 GB的文件。

FWIW,在POSIX世界中,有一个(带符号)整数类型off_t,用于表示文件大小和偏移量。使用各种宏(例如Linux上的_FILE_OFFSET_BITS = 64),可以将off_t重新定义为64位类型。

0

如果你在谈论ASCII字符,他们不会有127以上的值。因此,使用unsigned char数据类型就足够了。

+0

我不是在谈论ASCII字符;我正在谈论任何特定角色在文件中的位置。 – Maxpm 2011-03-28 13:36:31

2

你可能安全与两者;基本上你想能够存储max_file_size的值;

一个文件的字节大小被定义为一个长的结构stat;在64位平台上,size_t可能总是被定义为64位数字,在32位数字上被定义为32位数字等;除非你使用奇怪的编译器。

退房a size_t related post

我会去长。 std :: size是语言特定的,我倾向于在这里使用特定于操作的类型。但我再次看到使用std :: size_t也没有问题

4

std::streampos是表示字符流(包括文件)中位置的标准类型。

0

你想不想也代表“无效索引”?如果是这样,为什么不只是使用ssize_t