字符串到byte []没有编码或更改字符串的实际字节

时间:2013-07-27 16:52:03

标签: c# string type-conversion bytearray

假设我得到以下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[]

提前致谢

3 个答案:

答案 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);