2011-11-02 24 views
4

C++の文字列にCTRL-A(0x01)を保存します。次のように試してみましたが、うまくいきません。私がここで紛失しているものを教えてください。CTRL-A(0x01)をC++文字列に格納する方法は?

string s = "\u0001"; 

++グラムでコンパイルしたとき、私はエラーを取得する:

error: \u0001 is not a valid universal character 

答えて

5

あなたが得るエラーがある中起因する2.2/2 C++ 03:

ユニバーサル文字名の16進値がある場合は0x20または範囲から0x7F、0x9F未満 (また、ユニバーサル の文字名が基本ソース文字 の文字を指定している場合、プログラムは不正です。

ので、文字列リテラルのために、あなたは(あなたが味に先行ゼロを追加することができます)の代わりに\x1または\1を使用する必要があります。

string s; 
s.push_back(1); 

か::

string s(1,1); 

制限はC++ 11(2.3/2)に緩和されている:あなたは、文字列内の1つの文字だけ欲しいんまた場合

場合文字の 文字列リテラル corのユニコード文字名の16進数値 文字のc-char-sequence、s-char-sequence、またはr-char-sequence以外制御文字( の範囲0x00-0x1Fまたは0x7F-0x9Fのいずれかに含まれる)または基本ソース文字セット の文字に応答すると、プログラムは不正な形式になります。

2

あなたはコードが進であることを

std::string s = "\001"; 

注意を使用することができます。

2

stringはASCII文字を格納します。コンパイラは入力文字セットをASCIIに変換する必要があります。このマッピングはの実装が定義されています;コンパイラベンダーがU + 0001からASCII 0x01にマップしないことを決定したようです。

あなたはすでに、それは非常に簡単です進数であなたの価値を持っているので、あなたは

string s = "\001"; 
+1

'std :: string'には' char'が格納されています。これはASCIIと何か関係があります。 –

+0

ポイントを獲得しました。 –

4

を使用して文字列を初期化することができるはずです。

std::string s = "\x01"; 

これは文字通りの任意の16進文字のために動作します。一般的な形式は\x<hex number>です。

関連する問題