簡體   English   中英

如何使用fwrite()將無符號的long long整數值寫入文本文件?

[英]How to write an unsigned long long integer value to a text file using fwrite()?

我需要將無符號的long long整數值寫入文本文件。 當我使用fprintf()時,它可以正常工作,但是要花一些時間。 我已經分析了我的應用程序,而fprintf()占用了一半的時間。 我進行了研究,發現fwrite()比fprintf()更有效。 但是我無法管理如何使用它?

我的代碼與fprintf()

fprintf(out, "%llu %llu\n", min, minv);

我的代碼與fwrite()

fwrite(&min,sizeof(unsigned long long int),1, out);
fputs(" ",out);
fwrite(&minv,sizeof(unsigned long long int),1, out);
fputs("\n", out);

fwrite()比第一個更快,但是當我打開文件時,數據就像

¾²ö㄀㄀㄀ `àÔàUü
ؾ{4-㄀㄀㄀ "¤#sÏ$P
 oD/㄀㄀㄀ 
-5X®Z

在這種情況下如何正確執行fwrite()?

...需要將無符號的long long整數值寫入文本文件...

下面是寫unsigned long long的典型方法。 請注意,該文件以文本模式打開。

out = fopen("data.out","w");
fprintf(out, " %llu", x);

為了更快地寫入,請考慮以二進制模式寫入文本文件。 這將丟失行尾翻譯,但可能會提高性能。

out = fopen("data.out","wb");
fprintf(out, " %llu", x);

如果編譯器較弱,則將unsigned long long轉換為字符串可能會進一步改善。 需要非標准轉換功能。 這里的一些想法

out = fopen("data.out","wb");
char buf[50];
buf[0] = ' ';

size_t size = my_ulltoa(&buf[1], x);  // returns size of the array used.
fwrite(buf, 1, 1 + size, 1, out);

OP對以下內容的使用失敗,因為它向文本文件中寫入了二進制(例如4或8字節)表示形式,該表示形式不能以字符形式讀取。

out = fopen("data.out","w");
// fails
fwrite(&min,sizeof(unsigned long long int),1, out);

更快的方法是將二進制表示形式寫入二進制文件-但這不能作為文本讀取。

// Works for non-text files
out = fopen("data.out","wb");
fwrite(&min, sizeof min, 1, out);

fwrite()更快,因為它實際上並未將值轉換為可以使用文本編輯器查看的字符表示形式。 它只是將整數的原始字節數據寫入文件。

如果您想使用fwrite() ,則必須事先將整數值轉換為字符串,盡管我認為與單純使用fprintf()您將很難獲得性能提升。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM