簡體   English   中英

從C中的二進制文件讀取不同位數據的良好編碼風格是什么?

[英]What's a good coding style for reading different bits of data from a binary file in C?

我是新手程序員,正在用C編寫一個簡單的wav播放器作為寵物項目。 文件加載過程的一部分需要從文件頭讀取特定的數據(采樣率,通道數等)。 目前,我正在做的事情與此類似:

  1. 掃描字節序列並跳過它
  2. 將2個字節讀入變量a
  3. 檢查值並返回錯誤
  4. 跳過4個字節
  5. 將4個字節讀入變量b
  6. 檢查值並返回錯誤

...等等。 (代碼請參見: https : //github.com/qgi/Player/blob/master/Importer.c

我編寫了許多輔助函數來執行掃描/跳過/讀取位。 仍然我要重復閱讀,檢查,略過部分內容,這似乎既不是很有效也不是很聰明。 對於我的項目而言,這不是一個真正的問題,但是由於在處理二進制文件時這似乎是一個很常見的任務,我想知道:是否存在某種模式來使用更干凈的代碼更有效地執行此操作?

人們通常會定義與文件結構相匹配的結構(通常使用#pragma pack(1)之類的格式以確保不會出現填充)。 然后,他們將數據讀入具有fread類的數據的實例,並使用結構中的值。

我遇到的最干凈的選項是Kernighan&Pike在《編程實踐》第219頁上提出的類似於scanf的函數unpack ,可以像

// assume we read the file header into buf
// and the header consists of magic (4 bytes), type (2) and length (4).
// "l" == 4 bytes (long)
// "s" == 2 bytes (short)
unpack(buf, "lsl", &magic, &type, &length);

為了提高效率,使用大小為4096的緩沖區讀取緩沖區,然后對緩沖區中的數據進行解析會更有效,並且在僅前進的情況下執行一次掃描解析的過程效率最高。

暫無
暫無

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

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