9

符号付き 8 ビット整数に変換する必要がある 16 進文字列を取得しています。現在、Int16/Int32 を使用して変換していますが、これは明らかに 8 ビット整数の負の値を与えません。16 進数で 255 という値を取得した場合、それを 10 進数で -1 に変換するにはどうすればよいですか? sbyte を使用したいと思いますが、その値を適切に取得する方法がわかりません。

4

3 に答える 3

10

使用できますConvert.ToSByte

例えば:

string x = "aa";
sbyte v = Convert.ToSByte(x, 16);
// result: v = 0xAA or -86

使用することもできますsbyte.Parse

例えば:

string y = "bb";
sbyte w = sbyte.Parse(y, System.Globalization.NumberStyles.HexNumber);
// result: w = 0xBB or -69

Int16 の上位バイトまたは下位バイトに関する質問に答えるには:

string signed_short = "feff";

// Truncate 16 bit value down to 8 bit
sbyte b1 = (sbyte)Convert.ToInt16(signed_short, 16);
sbyte b2 = (sbyte)short.Parse(signed_short, System.Globalization.NumberStyles.HexNumber);
// result: b1 = 0xFF or -1
// result: b2 = 0xFF or -1

// Use upper 8 bit of 16 bit
sbyte b3 = (sbyte)(Convert.ToInt16(signed_short, 16) >> 8);
sbyte b4 = (sbyte)(short.Parse(signed_short, System.Globalization.NumberStyles.HexNumber) >> 8);
// result: b3 = 0xFE or -2
// result: b4 = 0xFE or -2
于 2010-09-14T01:03:57.020 に答える
2

unchecked次のようにキャストを実行する必要があります。

sbyte negativeOne = unchecked((sbyte)255);
于 2010-09-14T00:54:16.463 に答える
0

私の解決策は、最初に16ビット整数の最初の8ビットを取り、それらをsbyteに格納することでした。

于 2010-10-09T22:07:55.273 に答える