2012-03-27 43 views
6

我正在閱讀一個id3標籤,其中每個幀的大小以3個字節指定。我怎樣才能將這個值用作int?你如何讀取一個3字節大小的值作爲一個整數在c + +?

+1

什麼意思是「閱讀」?從記憶裏?從一個文件? – 2012-03-27 19:47:17

+1

在C中,你可以利用稱爲位域的東西,類型爲int,佔用3個字節= 3 * 8 = 24位。在C中,這由'int int_3byte:24'(在一個結構體內)表示。我想C++有一個等同的機制。 – phimuemue 2012-03-27 19:49:18

+2

請不要使用位域。 – 2012-03-27 19:49:59

回答

9

閱讀每個字節,然後把它們一起放入您的int

int id3 = byte0 + (byte1 << 8) + (byte2 << 16); 

確保採取字節順序考慮。

+0

'+'或'|'? [..] – Muggen 2012-03-27 19:51:19

+1

沒關係,在這種情況下它們是一樣的。 – 2012-03-27 19:51:32

+0

非常好,謝謝 – carboncomputed 2012-03-27 19:55:20

5

讀取的字節中的個別,並把它們放到正確的位置在一個int:

int value = 0; 

unsigned char byte1 = fgetc(ID3file); 
unsigned char byte2 = fgetc(ID3file); 
unsigned char byte3 = fgetc(ID3file); 

value = (byte1 << 16) | (byte2 << 8) | byte3; 

編輯:看來,ID3使用網絡(大尾數)字節順序 - 改變代碼相匹配。

+0

這個假設'char'是unsigned ...(另外,'fgetc'返回一個'int'!) – 2012-03-27 19:49:00

+0

@OliCharlesworth:fgetc返回一個int值,但唯一可以是負值的值(如int)就是EOF(我忽略此時此刻)。 – 2012-03-27 19:52:23

+2

C++的人可能討厭它使用'fgetc()',但我與傑裏。 – 2012-03-27 19:52:57

相關問題