Как записать данные разных типов в двоичный файл - PullRequest
0 голосов
/ 12 января 2019

Насколько я понимаю, I является примером символа формата, который представляет целое число без знака, а f используется для представления числа с плавающей запятой

Но когда я пытаюсь записать [120,3.5,255,0,100] в двоичный файл в байтах:

from struct import pack
int_and_float = [120,3.5,255,0,100]
with open ("bin_file.bin","wb") as f:
    f.write(pack("IfIII",*bytearray(int_and_float)))

выход

TypeError: требуется целое число

Так нельзя ли хранить числа с плавающей запятой и целые числа как байты в одном списке?

1 Ответ

0 голосов
/ 12 января 2019

Не передавайте bytearray. Передайте ваши значения напрямую в качестве аргументов:

f.write(pack("IfIII", *int_and_float))

Это bytearray() вызов , который выдает исключение, которое вы видите, и вам даже не нужен этот тип здесь:

>>> int_and_float = [120,3.5,255,0,100]
>>> bytearray(int_and_float)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

struct.pack() принимает целые числа (и строки) и выдает байты в качестве вывода:

>>> import struct
>>> struct.pack("IfIII", *int_and_float)
b'x\x00\x00\x00\x00\x00`@\xff\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00'
...