web-dev-qa-db-ja.com

C#16進表記文字列を作成する

16進表記のエスケープシーケンス文字列を作成するにはどうすればよいですか。

例:

string s = "\x1A"; // this will create the hex-value 1A or dec-value 26

このように、00からFFまでの16進値の文字列を作成できるようにしたい(この例では1B)

string s = "\x" + "1B"; // Unrecognized escape sequence

たぶん、16進文字列を作成する別の方法があります...

16
humcfc

16進値を文字列に格納しません。

可能ですが、それは文字列であり、実際にその値を読み取るには整数またはバイトにキャストする必要があります。

ただし、16進値をリテラルとしてintまたはバイトに割り当てることができます。

Byte value = 0x0FF;
int value = 0x1B;

したがって、16進リテラルを文字列に渡すことは簡単に可能です。

string foo = String.Format("{0} hex test", 0x0BB);

これにより、この文字列「126hextest」が作成されます。

しかし、私はそれがあなたが望んでいたものではないと思いますか?

20
FlySwat

\xエスケープシーケンスは避けてください。どこで止まるかはデータに依存するため、読みにくいです。たとえば、これら2つの文字列の間に一目でどのくらいの違いがありますか?

"\x9Good compiler"
"\x9Bad compiler"

前者では、「\ x9」はタブです。「G」は有効な16進文字ではないため、エスケープシーケンスはそこで停止します。 2番目の文字列では、「\ x9Bad」はすべてエスケープシーケンスであり、ランダムなUnicode文字と「コンパイラ」が残ります。

代わりに\ uエスケープシーケンスを使用することをお勧めします。

"\u0009Good compiler"
"\u0009Bad compiler"

(もちろん、タブには\tを使用しますが、私が何を意味するのかがわかるといいのですが...)

もちろん、これは元の質問とは少し異なりますが、すでに回答済みです:)

35
Jon Skeet

16進数用の「\ u」エスケープコードがあります16ビットユニコード文字コード。

Console.WriteLine( "Look, I'm so happy : \u263A" );
4