2016-10-17 73 views
1

我有一個C程序,它將頻率表寫入二進制文件。 頻率表是一個填充了包含int和char的結構的數組。C - 僅使用3個字節將整數寫入二進制文件

所以我必須寫一個無符號的int計數器和一個無符號的字符到文件(多次)。

我知道一個整數通常使用4個字節,但我知道int計數器永遠不會大於2^24-1。

所以我可以使用4個字節來寫計數器和字符到文件=> 3個字節的計數器和1個字節的字符。這也很容易閱讀。

有沒有一種簡單的方法可以在不使用特殊庫的情況下在C中執行此操作?

+0

這可以很容易使用'炭[4]'和'fread' /'fwrite'來完成。如果這還不足以提示,請更具體地說明你不知道該怎麼做。 – zwol

回答

4

是的,有由char 24位轉移到做在C.您可以結合char,這是在所有平臺上的一個字節,與規模高達24位的int的一個非常簡單的方法左邊:

uint32_t toWrite = (myChar << 24) | myCount; 

當讀回數據,則執行相反的操作:

uint32_t fromFile; 
uint32_t myCount = fromFile & 0xFFFFFF; 
char myChar = (fromFile >> 24) & 0xFF; 
+0

現在你有一個排序問題。另外,移入符號位是UB。 – zwol

+0

@zwol整數沒有任何字節順序。 –

+0

@WeatherVane執行fwrite(&toWrite,sizeof(int),1,fp)時寫入文件的字節具有字節序,並且您不知道哪一個字節。 – zwol

相關問題