类似于java到python的struct功能

2024-04-28 20:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了一个程序,在TIFF IFD中查找特定的标记并返回值。这只是python中的一个概念验证,现在我需要将功能转移到java中。我想我可以对ASCII数据类型使用String(byteArray[])构造函数,但是我仍然需要得到Unsigned short (2 byte)和{}的值。我不需要将它们写回文件或修改它们,只需从它们中获取一个Java Integer或{}对象。在python中使用structmmap类很容易做到这一点,在java中有人知道类似的方法吗?我查看了DataInput类,但是readUnsignedLong方法读取了8个字节。在


Tags: 方法标记程序功能概念stringasciijava
3条回答

DataInputStream允许你读短线和长线。您应该使用适当的位掩码(缩写为0xFFFF,即0xFFFFFFFF表示32位),以解释有符号/无符号类型之间的差异。在

例如

// omits error handling
FileInputStream fis = ...;
DataInputStream stream = new DataInputStream(fis);
int short_value = 0xFFFF & stream.readShort();
long long_value = 0xFFFFFFFF & stream.readInt();

如果您确定数据不会朝向2字节字段或4字节字段的高端,则可以放弃位屏蔽。否则,您需要使用更宽的数据类型来解释无符号值比有符号对应的值包含更大范围的值。在

I looked at the DataInput class, but the readUnsignedLong method reads 8 bytes.

Java没有无符号类型。生成int需要4个字节,生成long需要8个字节,无符号或其他形式。在


如果不想使用DataInput,可以将字节读入字节数组(byte[]),并使用^{}将这些字节值转换为带左填充的ints和{}s。请参见^{}^{}。在

DataInput将是首选方法。您可以对两个字节值使用readUnsignedShort。对于4字节值,您必须使用workaround。。。在

long l = dis.readInt() & 0xffffffffL;

相关问题 更多 >