0

重複の可能性:
C#で16進数と10進数の間で数値を変換する方法は?

c# を使用して signed int に変換するのに苦労しています。次の文字列があるとしましょう。

AAFE B4FE B8FE

ここに 3 つのサンプルがあります。各サンプル (符号付き 16 ビット) は、4 桁の ASCII 16 進数シーケンス (2x2 桁/バイト) として書き込まれます。

助言がありますか?ありがとうございました。

4

2 に答える 2

1

Convert基数を受け入れるクラスでオーバーロードを使用して、任意の基数の数値の文字列を解析できます。この場合、おそらくこのオーバーロードが必要になるでしょう。

次に、次のようなことができます。

var groupings = "AAFE B4FE B8FE".Split();
var converted = groupings
    .Select(grouping => Convert.ToInt16(grouping, 16))
    .ToList();
于 2012-07-08T17:23:58.093 に答える
1

解析された値のエンディアンを指定する必要がある場合 (リトルエンディアンのバイト順であると仮定するのではなく)、byte結果の .xml 内の適切な場所にそれぞれを配置する必要がありますshort

HexToByte文字列値が適切にフォーマットされていない場合、 例外がスローされることに注意してください。

static byte HexToByte(string value, int offset)
{
   string hex = value.Substring(offset, 2);
   return byte.Parse(hex, NumberStyles.HexNumber);
}

static short HexToSigned16(string value, bool isLittleEndian)
{
   byte first = HexToByte(value, 0);
   byte second = HexToByte(value, 2);

   if (isLittleEndian) 
       return (short)(first | (second << 8));
   else
       return (short)(second | (first << 8));
}

...

string[] values = "AAFE B4FE B8FE".Split();
foreach (string value in values)
{
   Console.WriteLine("{0} == {1}", value, HexToSigned16(value, true));
}
于 2012-07-08T17:41:31.043 に答える