2013-10-15 128 views
-5

我有十六進制文件看起來像8D 13 75 D2 11 91 58 00 C0 4F 79 56 A4 60 00下面如何讀取從十六進制編輯器一個文件,並在C++

9C CB CB找到等效ASCII值00 00 92 02 00 00 40 1F 00 00 80 14 00 00 A4 08 00 00 90 02 00 00 A0 09 01 00 40 AE 00 00 E4 27 00 00 90 02 00 00 A0 09 01 00 FC 7A 00 00 84 31 01 00 CF 01 00 00 A0 09 01 00 14 A7 00 00 24 3B 02 00 75 02 00 00 A0 09 01 00 50 8D 00 00 C4 44 03 00 14 02 00 00 A0 09 01 00 20 35 00 00 64 4E 04 00 C8 00 00 00 90 02 00 00 E8 03 00 00 00 00 00 00 00 08 00 00 CA 01 00 00 A 4 00 00 00

前十六個字節(9C CB CB 8D 13 75 D2 11 91 58 00 C0 4F 79 56 A4)顯示了我的文件的標題。

+1

你可以發佈一些代碼,並解釋自從現在以來你有什麼嘗試? –

+0

其windows通訊錄文件。我通過研究wab文件來破解它的格式。現在我正在嘗試編寫它的C++代碼來讀取文件中的數據。可以告訴我如何通過C++程序讀取此文件的所有內容。 – azam42

+0

你不想'從十六進制編輯器'讀取文件。你只想讀*文件,*當然?這就是你自動聲明的一切。或者你是否真的需要閱讀一個十六進制編輯器出於某種原因?澄清。 – EJP

回答

1

這將十六進制輸入轉換成文字,並打印出來(雖然數字80和更高實際上不會ASCII,因爲他們是由ASCII定義的範圍之外):

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <string> 

int main() { 
    std::transform(std::istream_iterator<std::string>(std::cin), 
        std::istream_iterator<std::string>(), 
        std::ostream_iterator<char>(std::cout), 
        [](std::string const &in) { 
         return (char) strtol(in.c_str(), NULL, 16); 
        }); 
} 

我不確定能爲你做多少好事,但它似乎就是你要求的,沒有關於你真正想要什麼的更多信息,這與我認爲任何人都可能做到的一樣好。

+0

我想讀取和處理所有有意義的字節。 – azam42

+0

@ azam42:很難做到這一點,沒有描述哪些字節是有意義的。 –

+0

這是一個windows通訊錄文件在微軟outlook express.I想讀取和處理所有有意義的字節在小印度。例如我讀取十六進制字節0x08A4,並將其存儲在一個位置,現在我想尋求開始抵消0x08A4。現在從偏移量0x08A4我想讀取4個字節,如0x02B1D2。現在去偏移0x02B1D2並從當前偏移量中尋找24個字節。現在我想要讀取像0x0FFF0102這樣的四個字節。並將這些字節存儲在內存緩衝區中,並從這些腳本中檢索一些信息。你能幫我解決這個問題嗎? – azam42

相關問題