Java中的struct.unpack_from

我在Python中有以下指令我想用Java理解和翻译
values = struct.unpack_from('>%dL' % 96, input_content, 0)
>%dL是什么意思? 我已经检查了python http://docs.python.org/library/struct.html中的文档但没有关于百分比的信息。 我应该将每个返回值都视为Java中的一个字节,并将其转换为double或long? 谢谢你的帮助。     
已邀请:
%d
是一个类似于
C
中的Python字符串格式化程序。它所说的是在结束引用之后的东西代替格式化器,在这种情况下
96
代替
%d
%d
指定有符号整数十进制。
'>%dL'%96
是对
struct.unpack
的指令,说它需要解包的东西是一个大的无符号长整数,其中包含无符号整数小数。在
'>%dL'
传递到
unpack
之前,字符串格式化器被解析,
'>%dL'
变为
'>96L'
。看看`struct.unpack docs中的格式字符串部分 http://docs.python.org/library/stdtypes.html#string-formatting http://docs.python.org/library/struct.html?highlight=struct.unpack#format-strings     
Python交互式提示是你的朋友:
>>> '>%dL' % 96
'>96L'
>>>
所以,
values = struct.unpack_from('>%dL' % 96, input_content, 0)
相当于
values = struct.unpack_from('>96L', input_content, 0)
并且
struct
文档应该告诉你'> 96L'表示96个bigendian无符号32位整数。 我无法想象为什么原作者以这种混淆的方式写它。如果项目的数量是可变的,那么有必要使用这样的技术来构建格式,但是当它是已知常量时则不是这样。     
如果我在Java中编写相同的东西,它可能是这样的:
DataInputStream inputcontent = new DataInputStream(in);
long[] values = new long[96];
for (int i = 0; i < 96; i++)
    values[i] = inputcontent.readLong();
区别在于python代码使用已经加载的字节。 非常感谢John Machin和Matti的解释。     

要回复问题请先登录注册