我正在尝试将字节数组转换为字符串。这是包含“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”?
我尝试了很多字符集,但我似乎找不到我做错了什么。
提前谢谢你,
纪尧姆
最佳答案
字节数组不包含 www.google.ca
相反,它看起来像是包含三个独立的字符序列,其中每个序列都以一个字节为前缀,该字节包含序列的字节长度。这是一种相当普通的格式,用于在二进制数据包中发送字符串。
所以你得到 3 www 6 google 2 ca
我的猜测是,您应该将每个字符串识别为 DNS 名称组件,并自行将它们组装成以点分隔的字符串。
对于您尝试读取的 UDP 数据包,您是否有一个好的规范?那应该有更多信息。
(我看到您正在尝试回答 DNS 请求。DNS 协议(protocol)记录在 RFC 中:RFC 1035 数据包的 QNAME 部分与您找到的内容相对应。)
关于java - 如何在保留所有 "."的同时将字节数组转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620943/