从十六进制字符串到byteArray C#

时间:2012-11-05 08:35:48

标签: c# hex bytearray

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

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

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

3 个答案:

答案 0 :(得分:3)

在数组中有一个byes后,000之间没有区别。

您需要做的是,在将这些字节转换回字符串时,请确保将任何前导零重新插入。您可以通过调用

来执行此操作
string byteAsTwoDigitString = myByte.ToString("X2");

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

答案 1 :(得分: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();
 }

您也可以参考this

答案 2 :(得分:0)

你似乎很困惑。因为每个字节由两个字符表示,所以bytes数组将比字符串短两倍。解析时,必须确保每个字节必须转换为双字符串,即使它小于0x10 ,即不需要第二个字符。

那就是说,你可以使用以下LINQ oneliner:

string convertedBack = string.Join(string.Empty, bytes.Select(x => x.ToString("X2")).ToArray());