2017-05-26 70 views
3

我在寫一個簡單的數據包解析器。爲了測試,我已經準備了格式的數據如下:C++將字符串轉換爲其ASCII表示

std::string input = "0903000000330001 ... "; 

,我需要把它改造成這樣的

0x09 0x03 0x00 0x00 ... 

你能幫我,我應該如何構建新的字符串?

我已經嘗試過這...

std::string newInput = "\x09\x03\x00 ... "; 
std::string newInput = "\u0009\u0003\u0000 ..."; 

但程序返回該字符串的大小隻有兩個。

std::cout << newInput.size() << std::endl; 
> 2 

我真的丟失或用C誤解的東西...

+0

爲什麼不使用什麼是最直觀和最簡單的即。字符數組 – Artur

回答

6

std::string可以保持與內嵌的NULL字符的字符串,但你必須告訴它的長度在構造函數中:

std::string NewInput("\x09\x03\x00 ... ", number_of_characters); 

否則,std::string將使用strlen計算長度,並在\x00停止。

1

字符串,並在一定程度上也是在C++中,終止與空字符。因此,如果遇到'\x00'(又名'\0')字符,則認爲這是字符串的結尾。如果您主要關注每個角色的數值,則可以使用std::vector<uint8_t>或其他類似的代碼。 std::string可以處理空字符(您需要使用顯式長度的函數重載),但例如c_str()可能不像您預期​​的那樣運行。