gpt4 book ai didi

java - 将 byte[] 转换为带点的数组的正确方法

转载 作者:行者123 更新时间:2023-12-02 12:03:16 25 4
gpt4 key购买 nike

我正在从 pcap 数据包中捕获数据;在我的代码中,我有一个 byte[] 数据,我想使用 new String() 构造函数解码为 String。

我的代码如下:

byte[] data = payload.getByteArray(0, payload.size()); //jnetpcap, return a byte[] data
String datastr = new String(data);

Log.i("DNS PAYLOAD", datastr);

但是结果抛出:

DNS PAYLOAD: ������������������apisecmiuicom������

相反:

DNS PAYLOAD: api.sec.miui.com

我需要替换所有未知的“�”字符并获得如上所示的链接。有什么建议吗?

PD:使用 Array.toString(data),抛出此错误:

[-32, -51, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 97, 112, 105, 3, 115, 101, 99, 4, 109, 105, 117, 105, 3, 99, 111, 109, 0, 0, 28, 0, 1]

PD2:有效负载字符串数据(payload.toString())如下所示:

Data:  ******* Payload offset=42 (0x2A) length=107
Data:
002a: ab 7f 81 80 00 01 00 00 00 01 00 00 02 65 31 08 .............e1.
003a: 77 68 61 74 73 61 70 70 03 6e 65 74 00 00 1c 00 whatsapp.net....
004a: 01 c0 0f 00 06 00 01 00 00 00 e2 00 3e 03 6e 73 ............>.ns
005a: 31 03 70 31 33 06 64 79 6e 65 63 74 c0 18 0a 68 1.p13.dynect...h
006a: 6f 73 74 6d 61 73 74 65 72 08 77 68 61 74 73 61 ostmaster.whatsa
007a: 70 70 03 63 6f 6d 00 78 3a 61 3e 00 00 0e 10 00 pp.com.x:a>.....
008a: 00 02 58 00 09 3a 80 00 00 07 08 ..X..:.....

它是从传输协议(protocol) UDP、端口 53 中提取的。

最佳答案

可以执行 String.replace,但更正确:

int n = 0;
for (byte b : data) {
if (32 <= b && b < 127) { // Within ASCII
data[n++] = b;
}
}
String datastr = new String(data, 0, n, StandardCharsets.US_ASCII);

关于java - 将 byte[] 转换为带点的数组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com