10

数値の16進表現を文字列に入れることを含むC/C ++プログラムを書いていますが、どのように機能するかについて混乱しています\x。人々が「\xb2」のようなものを書いた例を見てきました。この場合、プログラムは、bの16進数の後に数値2が続くかどうか、またはb2の16進数が必要かどうかをどのように認識しますか?さらに、これをメモリに格納するときに、「\ x」文字を保存しますか、それとも単に16進表現を保存しますか?

4

4 に答える 4

9

C99 標準 (6.4.4.4) から:

8 進数または 16 進数の各エスケープ シーケンスは、エスケープ シーケンスを構成できる最長の文字シーケンスです。

于 2012-04-07T18:43:43.857 に答える
5

例として、文字列"123\x45"は として 16 進数で格納され31 32 33 45ます。

Oli の回答によると、「\x」の後の最長の有効な値が使用されます。

「\x」は保存されません。エスケープ シーケンスは、画面に表示される文字を格納するのではなく、指定された実際の文字を格納します。たとえば、'\n' は実際には改行文字 0x0A として格納されます。

于 2012-04-07T18:51:27.543 に答える
2

文字列内でエスケープ シーケンス \x を使用すると、\x に続くデータは実際にはバイナリ表現で格納されます。

したがって、文字列「ABC」は文字列「\x414243」と同等です

表示文字形式で 16 進値を発行する場合は、%x または %X 書式指定子文字を使用する必要があります。

printf("%X%X%X", 'A', 'B', 'C');    // emits "414243"

C ライブラリ リファレンス ガイドのセクション1.2.6およびセクション1.2.7を参照してください。

説明が役立つことを願っています。

于 2012-04-07T18:51:38.487 に答える