【问题标题】:How to convert byte array to string while keeping all "."?如何在保留所有“。”的同时将字节数组转换为字符串?
【发布时间】:2016-02-10 19:06:57
【问题描述】:

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

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

提前谢谢你,

纪尧姆

【问题讨论】:

  • 你是怎么想出QDNBArray的内容的?
  • 一个点应该是4662 哪里来的?
  • 看看你的字节数组。没有一个“点”实际上是点。你用的是什么编码?查找362,看看这些字符是什么。
  • 我在java中运行本地自制的dns服务器(学校作业)。然后使用 cmd 我对 www.google.ca 进行了 nslookup 并过滤了包含合格域名 (www.google.ca) 的部分。

标签: java encoding character-encoding binary byte


【解决方案1】:

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

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

所以你得到 3 www 6 google 2 ca

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

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

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

【讨论】:

  • 谢谢@antlesoft,这很有意义!
猜你喜欢
  • 2014-05-09
  • 2014-04-16
  • 2022-01-23
  • 2013-05-08
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多