如何在保留所有“。”的同时将字节数组转换为字符串?

How to convert byte array to string while keeping all "."?

我正在尝试将字节数组转换为字符串。这是包含 "www.google.ca".

的 udp 数据包的一部分
byte[] QDNBArray = [3, 119, 119, 119, 6, 103, 111, 111, 103, 108, 101, 2, 99, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

String s = new String(QDNBArray, "UTF-8");

为什么我得到的是 "wwwgoogleca" 而不是 "www.google.ca"?

在 Eclipse 中我什至看到了这个:

我尝试了很多字符集,但我似乎找不到我做错了什么。

提前谢谢你,

纪尧姆

字节数组不包含www.google.ca

相反,它看起来像是包含三个独立的字符序列,其中每个序列都以一个包含序列长度(以字节为单位)的字节为前缀。这是一种相当普通的格式,用于在二进制数据包中发送字符串。

所以你得到 3 www 6 google 2 ca

我的猜测是,您应该将每个字符串识别为 DNS 名称组件,然后 assemble 自己将它们识别为以点分隔的字符串。

您是否对您尝试读取的 UDP 数据包有良好的规范?那应该有更多的信息。

(我看到您正在尝试回答 DNS 请求。DNS 协议记录在 RFC 中:RFC 1035 数据包的 QNAME 部分与您找到的内容相对应。)