我输入了字符串:“0080801D803480002A1168301FE16E09” 当我用代码将其转换为byteArray时:
Convert.ToByte(inputWrite.Substring(i, 2), 16);
我得到第一个位置的字节数组=“0”,但是我需要有“00”,所以当我再次将它转换为字符串时,不要在开始时获得“08”而是“00”。
我进入和string "080801D80348002A1168301FE16E9"
并且像这样我错过了一些重要的0,我需要从最后一个字符串转换为字节再次转换为十进制值。
答案 0 :(得分:3)
在数组中有一个byes后,0
和00
之间没有区别。
您需要做的是,在将这些字节转换回字符串时,请确保将任何前导零重新插入。您可以通过调用
来执行此操作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());