重複の可能性:
C#で16進数と10進数の間で数値を変換する方法は?
c# を使用して signed int に変換するのに苦労しています。次の文字列があるとしましょう。
AAFE B4FE B8FE
ここに 3 つのサンプルがあります。各サンプル (符号付き 16 ビット) は、4 桁の ASCII 16 進数シーケンス (2x2 桁/バイト) として書き込まれます。
助言がありますか?ありがとうございました。
重複の可能性:
C#で16進数と10進数の間で数値を変換する方法は?
c# を使用して signed int に変換するのに苦労しています。次の文字列があるとしましょう。
AAFE B4FE B8FE
ここに 3 つのサンプルがあります。各サンプル (符号付き 16 ビット) は、4 桁の ASCII 16 進数シーケンス (2x2 桁/バイト) として書き込まれます。
助言がありますか?ありがとうございました。
Convert
基数を受け入れるクラスでオーバーロードを使用して、任意の基数の数値の文字列を解析できます。この場合、おそらくこのオーバーロードが必要になるでしょう。
次に、次のようなことができます。
var groupings = "AAFE B4FE B8FE".Split();
var converted = groupings
.Select(grouping => Convert.ToInt16(grouping, 16))
.ToList();
解析された値のエンディアンを指定する必要がある場合 (リトルエンディアンのバイト順であると仮定するのではなく)、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));
}