如何将二进制文件头示例代码(C++/C语言)翻译成Python?

2024-09-28 22:34:05 发布

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

我正在写一个二进制文件来保存一个硬件仪器数据(Larson Davis 831C)基于制造商的示例代码。I以下样品:

<强> C++ >强>

string create_ldbin_header(int num_files, vector<int>& file_sizes)
{
ostringstream return_value;

int hdr1 = 'LD';
int hdr2 = 'BIN';
int hdr3 = 1;
int hdr4 = num_files;

return_value.write((char*)&hdr1, 4);
return_value.write((char*)&hdr2, 4);
return_value.write((char*)&hdr3, 4);
return_value.write((char*)&hdr4, 4);

for (int i = 0; i < num_files; ++i)
{
    return_value.write((char*)&file_sizes[i], 4);
}
return return_value.str();
}

C中的另一个版本#

private void WriteLDBinHeader(BinaryWriter writer, int fileSize)
        {
            writer.Write();
            writer.Write((Int32)0x0042494E);
            writer.Write((Int32)0x00000001);
            writer.Write((Int32)1);
            writer.Write((Int32)fileSize);
        }

我用Python做同样的尝试失败了。我试过几个版本,但我并不精通struct-pack。我认为表示格式的字符串应该是{0:032b}。总之,我最后一次尝试是:

hdr1 = "LD"
hdr2 = 'BIN'
hdr3 = "1"
hdr4 =str(y[0]["size"])
header = struct.pack('=iiii',hdr1,hdr2,hdr3,hdr4)

with open('instrumentFile.ldbin', 'wb') as f:
    f.write(header + r.content)

如有任何翻译指导,将不胜感激


Tags: returnvaluefilesnumwriteintwriterheader
2条回答

试试这个:

hdr1 = 0x00004c44  # "  LD"
hdr2 = 0x0042494e  # " BIN"
hdr3 = 1
hdr4 = int(y[0]["size"])
header = struct.pack('>iiii',hdr1,hdr2,hdr3,hdr4)

with open('instrumentFile.ldbin', 'wb') as f:
    f.write(header + r.content)

很有帮助。。。。它没有工作,但你给了我信心去迭代更多。我能够得到一个正确的工作文件来比较十六进制转储中的下载版本,并且能够解决这个问题。因此产生的工作代码如下:

hdr1 = 0x00004c44  # "  LD"
hdr2 = 0x0042494e  # " BIN"
hdr3 = 0x00000001  # " Another item buried in documentation but does not match sample C++ code"
hdr4 = 1
hdr5 = 4202629
header = struct.pack('iiiii',hdr1,hdr2,hdr3,hdr4,hdr5)

with open('C:\\WJE Work\\excel\\instrumentFile.ldbin', 'wb') as f:
    f.write(header + r.content)
有趣的是HD3以上不是在样本C++代码中,而是在C<。p>

谢谢你的帮助

相关问题 更多 >