2011-03-28 81 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