gpt4 book ai didi

Java:解析无符号二进制数据

转载 作者:搜寻专家 更新时间:2023-11-01 02:46:22 27 4
gpt4 key购买 nike

我有一个定义明确的二进制数据,我想为它编写 Java API。
文件格式是这样的

File Signature     char[4]               4 bytes 
File Source ID unsigned short 2 bytes
Header Size unsigned long 4 bytes
Max double 8 bytes

我正在使用 DataInputStream 来解析数据。 char 很容易解析,没问题。但是unsigned无法正确解析。
我知道Java没有unsigned number。我该如何转换它? (请以unsigned long为例)。

编辑

这是我写的代码:

File file = new File("lidar.las");

DataInputStream in= new DataInputStream(new FileInputStream(file));

in.skipBytes(6);

long read = (long) (in.readInt() & 0xFFFFFFFFL);

System.out.println("read " + read);


输出是

read 3288596480

我的预期数字是 1220 .我不知道写这个二进制记录的代码,可能是用c。我想要的只是编写一个 Java 版本来读取数据。

已解决
我不确定我能回答我自己的问题。哈哈
无论如何,这是解决方案。

private static int getSignedInt( final int unsignedInt ){

ByteBuffer bb=ByteBuffer.allocate(1024*4);

bb.putInt(unsignedInt).flip();

int result =bb.order(ByteOrder.LITTLE_ENDIAN).getInt();
bb.clear();

return result;
}

最佳答案

DataInputStream 以 Big Endian 方向读取字节,但检查一下:

3288596480 = 0xC4040000

反转字节,你得到 0x04C4 = 1220

您只需要阅读 Little Endian 中的值。关于标志的问题原来是转移注意力。

关于Java:解析无符号二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072985/

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