假设我得到以下byte[]
0C 00 21 08 01 00 00 00 86 1B 06 00 54 51 53 65 72 76 65 72
bitconverter BitConverter.ToString
我可以将其转换为
0C-00-21-08-01-00-00-00-86-1B-06-00-54-51-53-65-72-76-65-72
如何将其从字符串转换回byte[]
以获取
0C 00 21 08 01 00 00 00 86 1B 06 00 54 51 53 65 72 76 65 72
ascii编码和其他方法总是让我得到字符串的等效字节,但我真正需要的是字符串为byte [],因为它是,我知道我是否做了一个反转操作(使用getbytes然后tostring)生病结束使用相同的字符串,但我关心的是在getbytes获取确切的字节
正如我所说的
放
0C-00-21-08-01-00-00-00-86-1B-06-00-54-51-53-65-72-76-65-72
AS string
并获取
0C 00 21 08 01 00 00 00 86 1B 06 00 54 51 53 65 72 76 65 72
作为byte[]
提前致谢
答案 0 :(得分:4)
你需要这个
byte[] bytes = str.Split('-').Select(s => Convert.ToByte(s, 16)).ToArray();
答案 1 :(得分:3)
您可以在SoapHexBinary
命名空间
System.Runtime.Remoting.Metadata.W3cXsd2001
类
string s = "0C-00-21-08-01-00-00-00-86-1B-06-00-54-51-53-65-72-76-65-72";
byte[] buf = SoapHexBinary.Parse(s.Replace("-"," ")).Value;
答案 2 :(得分:1)
请注意,BitConverter.ToString返回等效的十六进制字符串表示,因此 如果你决定坚持转回如下:
string temp = BitConverter.ToString(buf);//buf is your array.
byte[] newbuf = temp.Split('-').Select(s => Convert.ToByte(s,16)).ToArray();
但是将字节转换为字符串并返回的最安全的方法是base64:
string str = Convert.ToBase64String(buf);
byte[] result = Convert.FromBase64String(str);