0

假设我得到以下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 获取确切的字节

就像我说的

放在

0C-00-21-08-01-00-00-00-86-1B-06-00-54-51-53-65-72-76-65-72

作为string

并得到

0C 00 21 08 01 00 00 00 86 1B 06 00 54 51 53 65 72 76 65 72

作为byte[]

提前致谢

4

3 回答 3

4

你需要这个

byte[] bytes = str.Split('-').Select(s => Convert.ToByte(s, 16)).ToArray();
于 2013-07-27T16:59:22.833 回答
3

您可以在命名空间中使用SoapHexBinarySystem.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;
于 2013-07-27T16:56:51.867 回答
2

请记住,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);
于 2013-07-27T17:33:34.360 回答