我没有太多直接使用二进制文件的经验(“我现在正在尝试自学)我正在使用python示例。我知道如何在C#中读取二进制文件但是我不知道我不太明白这个python中发生了什么:
headerparts = struct.unpack("2l", logfile.read(8))
headerlen = headerparts[1] - headerparts[0]
header = struct.unpack(str(headerlen)+"l", logfile.read(headerlen*4))
我假设发生的事情是它正在读取8个字节,然后使用它来计算标题的长度......我不太确定。
Python文档说明了struct.unpack:
struct.unpack(fmt,string) 根据给定的格式解压缩字符串(可能由pack(fmt,...)打包)。结果是一个元组,即使它只包含一个项目。该字符串必须包含格式所需的数据量(len(字符串)必须等于calcsize(fmt))。
我不太明白“21”是什么意思。这意味着它是一种格式,但我没有看到描述“21”的表格,我不知道它是否意味着其他东西。有人可以解释这里发生了什么和/或向我展示C#等价物吗?
答案 0 :(得分:1)
不是21
,而是2l
意味着两个l
。
l
表示long
(请参阅struct
- Format characters。)
答案 1 :(得分:0)
这就是我最终在C#中的表现:
// get bytes from file
var fileBytes = File.ReadAllBytes("parseMe.log");
// figure out the header length
var bodyLength = BitConverter.ToInt32(fileBytes, 0);
var headerLength = BitConverter.ToInt32(fileBytes, 4) - bodyLength;
// capture the header, which is an array of end index offsets
var header = new int[headerLength];
// grab the header out of the file
for (var index = 0; index < headerLength; ++index)
header[index] = BitConverter.ToInt32(fileBytes, 8 + index * 4);