整數我想要做的:讀了一系列的4個字節例如00000000 00000011 00000001 00000011
(這是一個隨機示例)從二進制文件,並表示它作爲在我的程序的整數。做這個的最好方式是什麼?字節從二進制文件
編輯解決方案我忽略了規範的PNG文件格式here的這部分,希望這是任何人發現的問題非常有用。
我正在與PNG圖像格式進行實驗時遇到了問題中提取的4字節數。我已經成功地打開和打印文件的二進制表示,所以我知道我一起工作的數據沒有損壞或者不正確。
我回顧了像Reading 16-bit integers from binary file c++和32位等價物的問題,但我無法辨別他們是否正在讀取二進制文件中的整數,例如00000000 72 00000000
或以整數讀取字節,這是我的目標。
作爲示例,第一個塊的前四個字節是00000000 00000000 00000000 00001101
或13
。
繼像上面的問題的例子中,這應該== 13:
int test;
img.read((char*) &test, sizeof(test));
但它輸出218103808
我也嘗試使用聯合與一個字符陣列和整數的方法數據成員,並得到了218103808
也是相同的輸出,我的系統上sizeof(int)
等於4
最後,只是要確定它是不是一個畸形的PNG(這不是我比較肯定)我用GIMP導入它,然後將其導出爲一個新的文件,所以我的系統上本地創建的。
編輯
正如我所說,seekg(8)
後,接下來的四個字節是00000000 00000000 00000000 00001101
但是當我決定使用測試read
功能
bitset<32> num;
img.read((char*) &num, sizeof(int));
它輸出00001101 00000000 00000000 00000000
我只是通過這個困惑部分,在這裏。就好像字節在這裏被顛倒一樣。而這個字符串的字節相當於218103808
任何有識之士將不勝感激
有關如何開始的一般概念,您可能需要查看一下我的舊答案。 http://stackoverflow.com/a/5762648/179910 –
謝謝,這是相當有幫助的。我對於爲什麼得到我編輯中提到的值「218103808」有點遺憾。我在你的頭文件驗證功能中看到它。我知道它表示的是13的長度,但它爲什麼會損壞到另一個數字?再次感謝 –
我想你對小端符號感到困惑。 https://en.wikipedia.org/wiki/Endianness的第一段應該讓你走上正軌。 –