java - 如何在保留所有 "."的同时将字节数组转换为字符串?

标签 java encoding character-encoding binary byte

我正在尝试将字节数组转换为字符串。这是包含“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 中我什至看到了这个:not working

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

提前谢谢你,

纪尧姆

最佳答案

字节数组不包含 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/

相关文章:

java - 将 hbase 移植到 .net 上

javascript - 如何使用 ExpressJS 将 JSON 作为 UTF-8 发送?

php - 将大型数据库从 Latin1 转换为 UTF8?

java:sortedList类比较错误

java - Android Eclipse 退出代码=15

java - 将 ActionListener 添加到 JFormattedTextField

encryption - Base64是加密算法还是编码算法?

linux - 在 linux 和 Windows 环境中共享时, Material 设计图标(如 "\f222")会发生变化

emacs - 如何让 emacs 接受 UTF-8(大写)编码?

text - TI-基本问题