Как записать в файл двоичные байты, НЕ ASCIIPython

Программы на Python
Ответить
Anonymous
 Как записать в файл двоичные байты, НЕ ASCII

Сообщение Anonymous »

Я работаю над программой для преобразования файлов CNG в JPEG и не могу понять, как записать двоичные байты в файл. Мой тестовый код:

Код: Выделить всё

import struct
import os

barray = bytearray()
s = 'e0e1e2e3e4e5e6e7e8e9eaebecedeeef'
i = 0
cnt = len(s)
while i < cnt:
j = i + 1
num = s[i] + s[j]
num = int(num, 16)
num = num ^ 239
#xnum = hex(num)[2:]
xnum = hex(num)
if num < 16: #if > 16, then add the leading 0 to the hex value to ensure 2-digits
xnum = xnum[:2] + '0' + xnum[2:]
#xnum = '0' + xnum
bnum = bytes(xnum, 'utf-8')
barray += bnum
i = j + 1
print('barray = \n' + str(barray))
outpath = 'C:\\Users\\jeffe\\Programming\\Python\\'
filename = 'hexformattest.jpeg'
savefilename = os.path.join(outpath + '\\' + filename)
binaryfile = open(savefilename, 'wb')
binaryfile.write(bytes(barray))
binaryfile.close()
Это дает следующий результат:

Код: Выделить всё

barray =
bytearray(b'0x0f0x0e0x0d0x0c0x0b0x0a0x090x080x070x060x050x040x030x020x010x00')
Но данные в файле:
Изображение

Поменяв местами знак комментария для строк 13 и 14, а также строк 16 и 17, получим следующее вывод:

Код: Выделить всё

barray =
bytearray(b'0f0e0d0c0b0a09080706050403020100')
с содержимым файла:
Изображение

Каждый ресурс, который я читал, подразумевает, что то, что я пробовал, должно записывать шестнадцатеричные значения, код операции, согласно "wb" в open() в файл. Однако все, что я делаю, это пишу коды ASCII для шестнадцатеричных значений. docs.python.org упоминает struct.pack():
Этот модуль преобразует значения Python в структуры C, представленные в виде байтовых объектов Python.
Но кажется, что Python действительно обеспечивает сохранение шестнадцатеричного значения в шестнадцатеричном виде в файл, но я этого не понимаю.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -not-ascii
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»