1

入力に文字列「0080801D803480002A1168301FE16E09」があり、コードを使用してbyteArrayに変換すると次のようになります。

Convert.ToByte(inputWrite.Substring(i, 2), 16);

バイト配列を最初の位置=「0」で取得しますが、「00」が必要なので、再度文字列に変換すると、最初に「08」ではなく「00」が取得されます。私はとに入ると、string "080801D80348002A1168301FE16E9"このように重要な0が欠落しているので、この最後の文字列からバイトに、そして10進値に変換する必要があります。

4

3 に答える 3

3

さようならを配列に入れたら、との間0に違いはありません00

これらのバイトを文字列に戻すときは、先行ゼロを必ず元に戻す必要があります。これを行うには、

string byteAsTwoDigitString = myByte.ToString("X2");

X「16進数として」、2は「少なくとも2桁」と言います。

于 2012-11-05T08:42:21.687 に答える
0

LINQを使用してこれを行うこともできます。

 public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
                 .Where(x => x % 2 == 0)
                 .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                 .ToArray();
 }

これを参照することもできます

于 2012-11-05T08:37:53.390 に答える
0

あなたは物事を混乱させているようです。各バイトは2文字で表されるため、バイト配列は文字列の2分の1になります。解析するときは、0x10未満、つまり2番目の文字を必要としない場合でも、各バイトを2文字の文字列に変換する必要があることを確認する必要があります。

そうは言っても、次のLINQワンライナーを使用できます。

string convertedBack = string.Join(string.Empty, bytes.Select(x => x.ToString("X2")).ToArray());
于 2012-11-05T08:52:26.587 に答える