C++の文字列にCTRL-A(0x01)を保存します。次のように試してみましたが、うまくいきません。私がここで紛失しているものを教えてください。CTRL-A(0x01)をC++文字列に格納する方法は?
string s = "\u0001";
++グラムでコンパイルしたとき、私はエラーを取得する:
error: \u0001 is not a valid universal character
C++の文字列にCTRL-A(0x01)を保存します。次のように試してみましたが、うまくいきません。私がここで紛失しているものを教えてください。CTRL-A(0x01)をC++文字列に格納する方法は?
string s = "\u0001";
++グラムでコンパイルしたとき、私はエラーを取得する:
error: \u0001 is not a valid universal character
あなたが得るエラーがある中起因する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のいずれかに含まれる)または基本ソース文字セット の文字に応答すると、プログラムは不正な形式になります。
あなたはコードが進であることを
std::string s = "\001";
注意を使用することができます。
string
はASCII文字を格納します。コンパイラは入力文字セットをASCIIに変換する必要があります。このマッピングはの実装が定義されています;コンパイラベンダーがU + 0001からASCII 0x01にマップしないことを決定したようです。
あなたはすでに、それは非常に簡単です進数であなたの価値を持っているので、あなたは
string s = "\001";
を使用して文字列を初期化することができるはずです。
std::string s = "\x01";
これは文字通りの任意の16進文字のために動作します。一般的な形式は\x<hex number>
です。
'std :: string'には' char'が格納されています。これはASCIIと何か関係があります。 –
ポイントを獲得しました。 –