在Java中实现Perl的解压缩方法功能

时间:2018-12-17 07:33:44

标签: java

我有要转换为Java的Perl代码。

我有一个至少包含48个元素的字节数组。从位置44开始是使用本地计算机字节顺序的32位带符号整数。我希望将这些字节解包到int中。

对于那些了解Perl的人,可以使用以下方法在Perl中获得该值:

my $SATsizeSectors = unpack("l", substr($header, 44, 4));

我正在使用以下代码,但它给了我错误的输出:

InputStream is = new ByteArrayInputStream(binaryData.getBytes());
byte[] bArr = new byte[4]; 
int bytesRead = is.read(bArr);
ByteBuffer buf = ByteBuffer.wrap(bArr);
resultData = buf.getInt(); 

1 个答案:

答案 0 :(得分:0)

如果您正在使用流,则DataInputStream是您想要的流。

byte[] header = ...;

DataInputStream dis = new DataInputStream(new ByteArrayInputStream(header));
dis.skipBytes(44);
int SATsizeSectors = dis.readInt();

但是使用以下命令可能会更简单:

byte[] header = ...;

int SATsizeSectors = ( ( header[47] >> 8 | header[46] ) >> 8 | header[45] ) >> 8 | header[44];