如何从字节数组中获取字符串?

uin*_*tea 1 c# arrays string byte

我正在创建自己的 DNS 服务器和主机拦截器,我想从 DNS 请求消息中获取主机 byte[]

dns 消息十六进制转储:

e07901000001000000000000057961686f6f03636f6d0000010001
.y...........yahoo.com.....
Run Code Online (Sandbox Code Playgroud)

代码:

e07901000001000000000000057961686f6f03636f6d0000010001
.y...........yahoo.com.....
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我上面的方法是正确/高效/最快获得主机名吗?
  2. 为什么我得到奇怪的字符替换点yahoo?com

更改为 Encoding.ASCII 或 Encoding.UTF8 无效

Mar*_*ell 5

  1. 不需要第二个数组;Encoding.GetString允许您传入偏移量和计数,因此:GetString(decoded, start, hostLength)
  2. 永远不要使用Encoding.Default; 那个名字很糟糕 - 它应该被称为Encoding.Wrong:) 找出数据的编码方式(可能是 UTF-8 或 ASCII),然后使用它
  3. 您应该能够使用IndexOf来找到终止'\0';还要考虑如果没有找到你的代码应该做什么

至于不寻常的字符:数据包含一个03字节,您会在其中期望.; 检查 DNS 协议规范以查看是否符合预期。03ETX(文本结束)。除此之外:我不知道。