0

char に char リテラルを割り当てたいのですが、それは 255 や 13 などの特殊文字です。char
にキャストされるリテラル int を char に割り当てることができることchar a = 13;
も知っています。また、Microsoft が使用できることも知っています。char リテラルとしての16 進コード:char a = '\xd'

これを行う方法が gcc でもサポートされているかどうか知りたいです。

4

2 に答える 2

1

のようなものを書く

char ch = 13;

値があなたのプラットフォームと同じものであるプラットフォームにほとんど移植可能です(これは、ASCII文字セットを使用するすべてのシステムであり、実際には今日のほとんどのシステムです)。13

別の意味を持つプラットフォームがあるかもしれませ13ん。ただし、'\r'文字エンコーディング システムに関係なく、代わりに使用することは常に移植可能である必要があります。

同等の文字リテラルを持たない他の値を使用すると、移植できません。また、127 を超える値を使用すると、移植性がさらに低下します。これは、文字がシステムのロケール設定に依存する可能性があるASCII テーブルの外にあり、拡張 ASCII テーブルに入るからです。たとえば、西ヨーロッパと東ヨーロッパの言語設定では、128toの255範囲に異なる文字が含まれる可能性が高くなります。

文字ではなく一部のバイナリ データのみを含むことができるバイトを使用する場合は、 を使用する代わりに、charたとえば をuint8_t使用して、変数を文字ではなくバイナリ データに使用していることをコードの他の読者に伝えることができます。 .

于 2013-10-23T18:27:44.053 に答える
0

16 進数のエスケープ シーケンスは、Microsoft に固有のものではありません。これは C/C++ の一部です: http://en.cppreference.com/w/cpp/language/escape

に 16 進数を割り当てることを意味します。charこれクロスプラットフォーム コードです。

char a = '\xD';

質問は、10進数をに割り当てることをすでに示していcharます:

char a = 13;

また、エスケープ スイッチのみを使用して、8 進数を割り当てることもできます。

char a = '\023';

ちなみに、'\0'ヌル文字を表すのは C/C++ では一般的です (プラットフォームに依存しません)。'\0'エスケープできる特殊文字ではありません。これは、実際には 8 進数のエスケープ シーケンスを呼び出しています。

于 2015-08-27T18:32:45.913 に答える