如何从Byte数组元素中解压缩/提取低阶和高阶值

时间:2014-08-13 04:24:35

标签: java sockets bytearray bytebuffer

我是位操作的新手,我通过套接字连接接收数据。

接收的数据填充在字节缓冲区中,大小为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.)来捕获已发送的数据集值?

3 个答案:

答案 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

操纵各个值(例如单个标题字段)的灵活性

由于