我想從文件中讀取一些字節。反轉內存空間的方向?
這是我做了什麼:
struct HeaderData {
char format[2];
char n_trks[2];
char division[2];
};
HeaderData* header = new HeaderData;
然後,直接從文件中獲取的數據header
我做
file.read(reinterpret_cast<char*>(header), sizeof(HeaderData))
如果前兩個字節是00 06
,header->format[0]
會是00
和header->format[1]
06
。合併的這兩個數字代表數字0x0006
,它是十進制的6
,這是所需的值。
當我這樣做
*reinterpret_cast<unsigned*>(header->format) // In this case, the result is 0x0600
它錯誤地返回數字0x0600
,所以它似乎反轉字節的讀取。
我的問題是什麼是一些解決方法,正確讀取數字爲無符號。
你是否依賴關於大端存儲與小端存儲整數形式的(可能是錯誤的)體系結構? –
'* reinterpret_cast(header-> format)'無論如何都是未定義的行爲。你應該在你的結構中使用'unsigned char',然後16位整型值是'format [0] * 256 + format [1];'。 –
我認爲這是明確定義的行爲,因爲char *和unsigned *可能在法律上是別名。 – Puppy