2011-11-02 169 views
4

我想將CTRL-A(0x01)存儲在一個C++字符串中。嘗試以下,但它不起作用。你能告訴我在這裏錯過了什麼嗎?如何將CTRL-A(0x01)存儲在C++字符串中?

string s = "\u0001"; 

我得到的錯誤在G ++編譯時:

error: \u0001 is not a valid universal character 

回答

5

你得到的錯誤是由於2.2/2在C++ 03:

如果一個通用字符名的十六進制值低於0x20的 或在0x7F的-0x9F範圍內(包括在內),或者如果通用 字符名稱指定了基本源字符集 中的字符,則該程序不合格。

因此,對於字符串文字,你必須使用\x1\1替代(你可以添加前導零的味道)。或者,如果你只是想在你的字符串一個字符:

string s; 
s.push_back(1); 

或:

string s(1,1); 

的限制放寬在C++ 11(2.3/2):

如果通用字符名稱的十六進制值 c-char-序列,s-char-序列或r-char-序列的字符或 字符串字面值 cor響應一個控制字符(在 範圍0x00-0x1F或0x7F-0x9F,包括兩者在內)或對基本源字符集 中的字符,該程序不合格。

2

您可以使用

std::string s = "\001"; 

注意,代碼是八進制。

2

A string存儲ASCII字符;編譯器需要將輸入字符集轉換爲ASCII。該映射是實現定義的;看起來你的編譯器廠商決定不從U + 0001映射到ASCII 0x01。

您應該能夠初始化使用

string s = "\001"; 
+1

'std :: string'存儲'char',它可能與ASCII沒有任何關係。 –

+0

採取了點。 –

4

串既然你已經有了你的價值在十六進制這很簡單:

std::string s = "\x01"; 

這適用於任何十六進制字符的文字。一般格式是\x<hex number>

相關問題