如何解决C# 无法将十六进制转换为可读字符串
我试图将一个十六进制字符串解码为可读字符串,但每次我尝试它都会输出一个不可读的字符串。
首先我传递十六进制 "2 41 4e 56 0 0 30 30 30 30 30 34 36 56 56 49 3 21"
并将其转换为 byte[]
:
byte[] bb = Enumerable.Range(0,Hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(Hex.Substring(x,2),16))
.ToArray();
然后我尝试将其转换为可读的字符串:
result = Encoding.Default.GetString(bb);
我得到一个不可读的字符串:
$�`Ceed�!
.Default 或 .Unicode,两者都输出与我预期不同的内容。
如果我使用 this tool(设置为 Unicode),它会输出我期望的内容:
ANV0000046VVI!
所以我知道它应该可以工作。
我不知道还能做什么。我以为这就够了,但还不够...
解决方法
从技术上讲,您可以过滤命令字符(0x02
、0x00
、0x03
)并获得所需的结果:
string source = "2 41 4e 56 0 0 30 30 30 30 30 34 36 56 56 49 3 21";
string result = Encoding.UTF8.GetString(source
.Split(' ')
.Select(item => byte.Parse(item,NumberStyles.HexNumber))
.Where(item => item >= ' ')
.ToArray());
Console.Write(result);
结果:
ANV0000046VVI!
现在出现下一个问题:为什么所有这些命令字符都在 source
中?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。