2011-02-02 42 views
7

我正在使用來自服務提供者的二進制數據。我通過使用C++的HTTP請求來訂閱這些數據。 我偶爾會得到來自這個提供者的HTML負載。該HTML有效載荷實際上是二進制數據,它看起來像這樣:在C++字符串中使用二進制數據

! ¦ô¿Âˤ ÍÌL? Àÿ Àÿ¥ š™©@ Àÿ Àÿ! H·ô¿Âˤ ÍÌL? Àÿ333?¥ š™©@ Àÿff¦@

我想用我得到的數據做模擬。要做到這一點,我硬編碼字符串中的數據,並啓動我的程序,將使用這些字符串。

std::string input = "! ¦ô¿Âˤ ÍÌL? Àÿ Àÿ¥ š™©@ Àÿ Àÿ"

的第一個問題我已經是我必須逃避所有的人物,如\n。但我不知道如何逃脫\0例如。另外,我有此錯誤信息,這可能是由於這樣的事實,我不正確轉義字符文件的末尾:

Error 3 fatal error C1004: unexpected end-of-file found

所以今天的主要問題是:什麼是最終OF-文件字符看起來像,我怎樣才能逃脫它?

那麼,是否有一個Linux命令或從二進制文件中獲取二進制數據的方法,並且使用\轉義所有特殊字符,然後我只是將它複製粘貼到我的C++代碼中。最後,我想將所有不同的有效載荷都放在二進制文件中,這樣我就可以使用這個文件啓動我的模擬。問題是我不知道如何區分不同的有效載荷,因爲只要到下一行就行不通,因爲它會被解釋爲一個隨機字符(並且有效載荷沒有固定大小) 。我不知道使用什麼樣的分離器。

回答

14

您可以將有效負載寫入文件並使用std::ifstream來讀取它。這將允許您更改有效內容,而無需重新編譯。

如果你真的希望將其存儲爲二進制數據,你可以使用一個字符數組,並初始化它這樣:

const unsigned char raw_data[] = { 
    0x21, 0x20, 0xc2, 0xa6, 0xc3, 0xb4, 0xc2, 0xbf, 
    0xc3, 0x82, 0xc3, 0x8b, 0xc2, 0xa4, 0x20, 0xc3, 
    0x8d, 0xc3, 0x8c, 0x4c, 0x3f, 0x20, 0x20, 0xc3, 
    0x80, 0xc3, 0xbf, 0x20, 0x20, 0xc3, 0x80, 0xc3, 
    0xbf, 0xc2, 0xa5, 0x20, 0xc5, 0xa1, 0xe2, 0x84, 
    0xa2, 0xc2, 0xa9, 0x40, 0x20, 0x20, 0xc3, 0x80, 
    0xc3, 0xbf, 0x20, 0x20, 0xc3, 0x80, 0xc3, 0xbf, 
    0x60, 0x20, 0x6f, 0x72, 0x20, 0x60, 0x21, 0x20, 
    0x48, 0xc2, 0xb7, 0xc3, 0xb4, 0xc2, 0xbf, 0xc3, 
    0x82, 0xc3, 0x8b, 0xc2, 0xa4, 0x20, 0xc3, 0x8d, 
    0xc3, 0x8c, 0x4c, 0x3f, 0x20, 0x20, 0xc3, 0x80, 
    0xc3, 0xbf, 0x33, 0x33, 0x33, 0x3f, 0xc2, 0xa5, 
    0x20, 0xc5, 0xa1, 0xe2, 0x84, 0xa2, 0xc2, 0xa9, 
    0x40, 0x20, 0x20, 0xc3, 0x80, 0xc3, 0xbf, 0x66, 
    0x66, 0xc2, 0xa6, 0x40, 0x0a, 
}; 

std::string data(
    reinterpret_cast< const char* >(raw_data), 
    reinterpret_cast< const char* >(raw_data) + sizeof(raw_data)); 

哦,順便說一句,我使用轉換你的有效載荷,以緩衝以下簡單的Python代碼:

#!/usr/bin/python 

def convert_file(path, stream): 
    data = open(path, 'rb').read() 
    stream.write('const unsigned char raw_data[] = {') 
    for i, char in enumerate(data): 
     if i % 8 == 0: 
      stream.write('\n ') 
     stream.write(' 0x%02x,' % (ord(char),)) 
    stream.write('\n};\n') 

if __name__ == '__main__': 
    import sys 
    convert_file(sys.argv[1], sys.stdout) 
+0

我想的有效載荷存儲在一個文件,但接縫像我必須把不同的有效載荷在不同的文件,因爲我不知道該用什麼分隔符。你也知道,如果我能得到一個腳本或命令從二進制數據中獲取char數組?謝謝 – Arthur 2011-02-02 10:55:22

相關問題