我是位操作的新手,我通过套接字连接接收数据。
接收的数据填充在字节缓冲区中,大小为8。
数据字段的数量为5。
数据/字段是可变长度的。因此,似乎有两个数据/字段组合为一个字节。
Sent dataset1: 1, 0, 0, 2, 22
Sent dataset2: 1, 0, 0, 2, 500
Example data received: [1, 0, -128, 22] or [1,0,-127, -12]
从示例字节数组元素总共4个,当通过套接字发送5个数据项时
我如何才能parse/unpack/extract byte array element (e.g., -128, -12, etc.)
来捕获已发送的数据集值?
答案 0 :(得分:0)
这个问题听起来很奇怪,如果你有一个字节数组,那么获取其索引所需的字节没有任何问题,你需要访问部分字节然后作为第一个你需要找到的规范协议,因为没有它你不了解字段长度
P.S。
对于位解析,您可以尝试JBBP
答案 1 :(得分:0)
更不可能,500不适合一个字节。 要看到规律性,你可能会用六角形拼图;显示位打包(如果是这种情况);
int[] dataset = new int[5];
byte[] received = new byte[5];
dataset[0] = received[0];
dataset[1] = received[1];
dataset[2] = received[2] - (received[4] < 0 ? 0x7f : 0x80);
dataset[3] = 2;
dataset[4] = received[3];
if (received[4] < 0) {
dataset[
dataset[4] += 0x200; // 512
}
您真的需要更多信息。以上是尝试将两个数据集与那些接收的字节匹配,通过最小位和&amp;操作。我不打赌1:100这是正确的解码。
答案 2 :(得分:0)
我修改了我的实现,使用DataInputStream从socket读取数据,如下所示:Java TCP How do you read a sent stream size (header) and keep reading based upon that size 此方法提供了使用ByteBuffer
操纵各个值(例如单个标题字段)的灵活性由于