1

我输入了字符串:“0080801D803480002A1168301FE16E09”,当我使用代码将其转换为 byteArray 时:

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

我在第一个位置得到字节数组=“0”,但我需要有“00”,所以当我再次将它转换为字符串时,开始时不要得到“08”而是“00”。我进入了string "080801D80348002A1168301FE16E9"并且像这样我错过了一些重要的0,我需要从最后一个字符串再次转换为字节并转换为十进制值。

4

3 回答 3

3

0一旦你在一个数组中有你的再见,和之间就没有区别了00

您需要做的是,将这些字节转换回字符串时,请确保将所有前导零放回。您可以通过调用来做到这一点

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

表示“X十六进制”,2表示“至少有两位数”。

于 2012-11-05T08:42:21.687 回答
0

你似乎把事情搞糊涂了。因为每个字节由两个字符表示,所以字节数组将比字符串短两倍。解析回来时,您必须确保每个字节都必须转换为双字符字符串,即使它小于 0x10,即不需要第二个字符。

也就是说,您可以使用以下 LINQ oneliner:

string convertedBack = string.Join(string.Empty, bytes.Select(x => x.ToString("X2")).ToArray());
于 2012-11-05T08:52:26.587 回答
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 回答