在python中以int形式写入二进制文件

2024-04-25 08:13:18 发布

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

我在做一个项目,输出的大小非常重要。由于我的输出是0到100之间的数字,所以我尝试将它们写成字节(或无符号字符)。你知道吗

然而,当我试图阅读它们的时候,我会出错。你知道吗

下面是一个简单的例子:

test_filename='test.b'
g=(3*ones(shape=[1000])).astype('c')
g.tofile(test_filename)

with open(test_filename, "rb") as f:
    bytes = f.read(1)
num = int(bytes.encode('hex'), 1)
print num

这是我得到的错误,不知怎么的字节.编码thingy不包括二进制字符串或类似的东西(当然不确定):

ValueError                                Traceback (most recent call last)
<ipython-input-43-310a447041fe> in <module>()
----> 1 num = int(bytes.encode('hex'), 1)
      2 print num

ValueError: int() base must be >= 2 and <= 36

我应该声明我以后需要读取C++中的输出文件。你知道吗

提前谢谢

吉尔


Tags: 项目test字节bytes符号数字filename字符
1条回答
网友
1楼 · 发布于 2024-04-25 08:13:18

基于您正在使用的python版本,这一点存在一些不确定性。你知道吗

如果是python2,我假设您使用它是因为print语句,那么您遇到的主要问题是从读取中获取字符串,因此如果值是50,那么如果您打印它,您将获得ascii值2。您需要告诉python,这些位应该是int类型而不是str类型,而简单的cast不能做到这一点。你知道吗

我个人会使用struct包并执行以下操作:

with open(test_filename, "rb") as f:
    bytes = f.read(1)
num = struct.unpack("B", bytes)[0]
print num

另一种选择是将字符串编码为十六进制,并将其作为十六进制字符串读入(这看起来像是您正在尝试的):

num = int(bytes.encode("hex_codec"), 16))
print num

最后一个选项是将字符串放入bytearray并提取第一个字节:

num = bytearray(bytes)[0]
print num

如果您实际使用的是python3,那么这就更简单了,因为您将得到一个bytes对象(如果是这样,请不要命名变量bytes,这非常混乱)。对于bytes对象,您只需拉出第一个元素,它将作为int拉出:

num = bytes[0]
print num

相关问题 更多 >