2015-06-10 17 views
1

ESC命令創建的字符串,我需要用十六進制格式定義的特殊characer創建的字符串:使用HEX定義

std::string s = "\xFEd" ; 
error C2022: '65242' : too big for character 

如果std::string s = "\xFE d" ;一切順利。如何判斷字符串構造函數在第一種情況下將「d」視爲字符串「d」而不是數字定義字符?

+1

「d」被視爲的十六進制編碼的一部分?那麼'「\ x00FEd」'應該可以工作。如果不是,那麼'「\ xFE」+「d」'必須工作。 – quetzalcoatl

+0

我同意。 'd'不應該被解釋爲十六進制代碼的一部分。你使用什麼編譯器? –

+1

你可以做例如''\ xfe「」d「' –

回答

1

您在標籤「visual C++」中寫道,所以我假設來自Visual Studio的Microsoft編譯器。

請查閱參考文獻和例子at this site。它告訴你應該使用什麼,但它似乎......一個小車。例如:

octal    \ooo 
hexadecimal  \xhhh  <- note the 3 Hs 
Unicode (UTF-8) \uxxxx 
Unicode (UTF-16) \Uxxxxxxxx 

和幾pagedowns後,實施例:

十六進制轉義序列是反斜線後跟字符x,隨後的十六進制數字序列。不包含十六進制數字的轉義序列會導致編譯器錯誤C2153:「十六進制常量必須至少有一個十六進制數字」。具有十六進制和非十六進制字符的轉義序列被評估爲最後一個非十六進制字符。 最高的十六進制值是0xff

char c1 = '\x0050'; // char 'P' <-- note 4 digits as 1 char 
char c2 = '\x0pqr'; // char 'r' 

注意\x0pqr事情。有趣!我懷疑編譯錯誤,但沒有!

(..)

我找到確切的答案在MSDN上:short infolong info。從後者得到:

使用嵌入的十六進制轉義碼指定字符串常量可能會導致意外的結果。以下示例旨在創建一個字符串文字包含ASCII 5字符,接着是字符F,I,V,以及e:

"\x05five" 

實際結果是一個十六進制5F,也就是下劃線的ASCII代碼,後面跟着字符i,v和e。爲了得到正確的結果,你可以使用其中的一個:

"\005five"  // Use octal constant. 
"\x05" "five" // Use string splicing.