たとえば、「70340A0100000000000000」などの HexString (PacketS) を取得しました。毎回 2 文字の後に分割し、バイト配列 (ストリーム) に入れたいと思います。
意味 {70, 34, 0A, 01, 00, 00, 00, 00, 00, 00, 00}
最短パス (.NET 4+) は次のとおりです (長さまたは原点によって異なります)。
byte[] myBytes = BigInteger.Parse("70340A0100000000000000", NumberStyles.HexNumber).ToByteArray();
Array.Reverse(myBytes);
myStram.write(myBytes, 0, myBytes.Length);
以前のバージョンでは、string.length/2 は、解析されたペアごとに満たすことができるバイト配列の長さも定義します。このバイト配列は、上記のようにストリームに書き込むことができます。
どちらの場合も、元の文字列が長すぎて巨大なバイト配列を避けたい場合は、元から N 文字のグループを取得する手順に進みます。
これは実際に完璧に機能しました!あなたのコードが同じことをしてすみませんが、私は理解していません。
public static byte[] ConvertHexStringToByteArray(string hexString)
{
if (hexString.Length % 2 != 0)
{
throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
}
byte[] HexAsBytes = new byte[hexString.Length / 2];
for (int index = 0; index < HexAsBytes.Length; index++)
{
string byteValue = hexString.Substring(index * 2, 2);
HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
return HexAsBytes;