如何从字节数组中获取字符串?
c#
我正在创建自己的 DNS 服务器和主机拦截器,我想从 DNS 请求消息中获取主机 byte[]
dns 消息十六进制转储:
e07901000001000000000000057961686f6f03636f6d0000010001
.y...........yahoo.com.....
e07901000001000000000000057961686f6f03636f6d0000010001
.y...........yahoo.com.....
代码:
问题:
- 我上面的方法是正确/高效/最快获得主机名吗?
- 为什么我得到奇怪的字符替换点
yahoo?com?
更改为 Encoding.ASCII 或 Encoding.UTF8 无效
回答
- 不需要第二个数组;
Encoding.GetString允许您传入偏移量和计数,因此:GetString(decoded, start, hostLength) - 永远不要使用
Encoding.Default; 那个名字很糟糕 - 它应该被称为Encoding.Wrong🙂 找出数据的编码方式(可能是 UTF-8 或 ASCII),然后使用它 - 您应该能够使用
IndexOf来找到终止' ';还要考虑如果没有找到你的代码应该做什么
至于不寻常的字符:数据包含一个03字节,您会在其中期望.; 检查 DNS 协议规范以查看是否符合预期。03是ETX(文本结束)。除此之外:我不知道。