2016-11-25 22 views
0

所以我應該從二進制文件中讀取一個隨機值。到目前爲止我的代碼看起來像這樣。如何在文件的位置指示符處讀取單個值?

char * filename = argv[1]; 
FILE * file = fopen(filename, "rb"); 
long int x; 
x = random() % 100; 
int ret = fseek(file, x, SEEK_SET); 

所以我有位置指示器的文件在隨機值的位置。現在我怎樣才能從文件中只讀取一個值?我已經在這個位置上了,我只需要閱讀那個位置上的那個值。 此外,該文件有100個隨機整數放置在它。這是一個二進制文件。 我可以使用long int我必須從文件中獲取一個隨機值嗎?或者我需要傳遞fseek,如x = x * sizeof(int)?不確定是否可以從二進制文件中獲取我的randomg值,因爲我之前從未使用過這些文件,所以我不知道我的代碼如何看待它。由於它是用「rb」參數打開的,我的代碼是以base10讀取值還是會看到二進制轉換?

+0

如果文件中有100個隨機「整數」,那麼你的隨機搜索位置必須是'sizeof(int)'的倍數 - 雖然我不寒而慄地問,如果文件本身包含隨機數據,誰在乎? –

+0

[C,fread二進制bin文件]可能的重複(http://stackoverflow.com/questions/10841946/c-fread-binary-from-bin-file) – OldProgrammer

回答

1

我不能評論,所以我寫這裏。您是否真的只需要讀取一個令牌,或者您需要使用隨機數x訪問令牌?

編輯:

,因爲你需要從文件中讀取的標記,你可以使用:

char * filename = argv[1]; 
char buffer[2]; 
FILE * file = fopen(filename, "rb"); 
long int x; 
x = random() % 100; 
int ret = fseek(file, x, SEEK_SET); 
fread(buffer, 1, 1, file); 
+0

我應該只讀取一個令牌。 –

+0

如果不是這種情況,您可以將所有文件讀入一個數組,並用隨機數訪問它。 – MrMuMu