[英]Read and write a buffer of unsigned char to a file in C?
以下代碼將無符號字符數組(定義為byte
)寫入文件:
typedef unsigned char byte;
void ToFile(byte *buffer, size_t len)
{
FILE *f = fopen("out.txt", "w");
if (f == NULL)
{
fprintf(stderr, "Error opening file!\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i < len; i++)
{
fprintf(f, "%u", buffer[i]);
}
fclose(f);
}
如何將文件從out.txt
讀回byte
緩沖區? 我們的目標是循環緩沖區byte
由byte
。 謝謝。
如何將文件從out.txt讀回字節緩沖區? 目標是逐字節迭代緩沖區。 謝謝。
與此類似的東西應該對您有用。 (未調試,請遠離我的編譯器執行此操作)
void FromFile(byte *buffer, size_t len)
{
FILE *fOut = fopen("out.txt", "rb");
int cOut;
int i = 0;
if (fOut == NULL)
{
fprintf(stderr, "Error opening file!\n");
exit(EXIT_FAILURE);
}
cOut = fgetc(fOut);
while(cOut != EOF)
{
buffer[i++] = cOut; //iterate buffer byte by byte
cOut = fgetc(fOut);
}
fclose(fOut);
}
如果您想讀回去,我不會用%u
來寫出來。 %u
將是可變寬度輸出,因此1 %u
一個字符, 12
%u
兩個字符,依此類推。當您讀回它並看到112
您不知道這是否是三個字符(1、2、1),或兩個(11,2;或1,12)或僅一個(112)。 如果需要ASCII文件,則可以使用固定寬度的輸出,例如%03u。 這樣,每個字節始終為3個字符。 然后,您可以使用fscanf("%03u", buffer[i])
一次讀取一個字節。
您可以(並且應該)使用fread()
和fwrite()
( http://www.cplusplus.com/reference/cstdio/fread/ )在FILE
和內存之間傳輸原始內存。
要確定文件的大小(建議fread()應該讀取多少字節),請使用fseek(f, 0, SEEK_END)
( http://www.cplusplus.com/reference/cstdio/fseek/ )來放置文件將光標移到文件末尾,並使用ftell(f)
( http://www.cplusplus.com/reference/cstdio/ftell/ )讀取其大小。 不要忘記從fseek(f, 0, SEEK_SET)
開始重新開始實際的閱讀過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.