C# で 16 進値を含む文字列を同等の符号付き短整数型に変換しようとしています。
例えば:
-1 に相当する 16 進数は 0xFFFF (2 バイト単位) です。
逆を行いたい、つまり 0xFFFF を -1 に変換したい
私は使用しています
string x = "FF";
short y = Convert.ToInt16(x,16);
しかし、出力 y は -1 ではなく 255 です。符号付きの同等の数値が必要です
誰でも私を助けることができますか?ありがとう
C# で 16 進値を含む文字列を同等の符号付き短整数型に変換しようとしています。
例えば:
-1 に相当する 16 進数は 0xFFFF (2 バイト単位) です。
逆を行いたい、つまり 0xFFFF を -1 に変換したい
私は使用しています
string x = "FF";
short y = Convert.ToInt16(x,16);
しかし、出力 y は -1 ではなく 255 です。符号付きの同等の数値が必要です
誰でも私を助けることができますか?ありがとう
ショートではなく、符号付きバイトの文字列表現を変換しようとしています。
代わりにConvert.ToSByte(string)を使用する必要があります。
実証するための簡単な単体テスト
[Test]
public void MyTest()
{
short myValue = Convert.ToSByte("FF", 16);
Assert.AreEqual(-1, myValue);
}
入力が「FF」の場合、文字列表現は 1 バイトの 16 進数になります。
これを short (2 バイト) に割り当てようとすると、変換された数値に符号を適用するために最後のビットが考慮されないため、255 の値が得られます。
代わりに、「FFFF」の文字列表現は 2 バイトを表し、最後のビットが 1 に設定されているため、Int16 のような符号付きの型に割り当てられた場合、結果は負になり、ushort のような符号なしの型に割り当てられた場合、65535 になります。
string number = "0xFFFF";
short n = Convert.ToInt16(number, 16);
ushort u = Convert.ToUInt16(number, 16);
Console.WriteLine(n);
Console.WriteLine(u);
number = "0xFF";
byte b = Convert.ToByte(number, 16);
short x = Convert.ToInt16(number, 16);
ushort z = Convert.ToUInt16(number, 16);
Console.WriteLine(n);
Console.WriteLine(x);
Console.WriteLine(z);
出力:
-1
65535
-1
255
255
16 進文字列と数値の間の変換の詳細については、http://msdn.microsoft.com/en-us/library/bb311038.aspxを参照してください。