如何将ASCII字节文件作为实际字节写入二进制文件?

2024-10-03 11:17:40 发布

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

我不知道如何用Python编写原始字节。我试了一下,但最后得到了一个.bin文件,里面有ASCII码。我的代码是:

fileWriteObject1 = open("md5One.bin", 'wb')
fileWriteObject2 = open("md5Two.bin", 'wb')
fileReadObject1 = open('bytes1.txt', 'r')
fileReadObject2 = open('bytes2.txt', 'r')

bytes1Contents = fileReadObject1.readlines()
bytes2Contents = fileReadObject2.readlines()

fileReadObject1.close()
fileReadObject2.close()


for bytes in bytes1Contents:
    toWrite = r"\x" + bytes
    fileWriteObject1.write(toWrite.strip()) 

for bytes in bytes2Contents:
    toWrite = r"\x" + bytes
    fileWriteObject2.write((toWrite.strip())

fileWriteObject1.close()
fileWriteObject2.close()

样本输入: d1 31 详细设计 02 c5 e6型 ee公司 补体第四成份 69 三维 9安 06 98 空军 九层 5摄氏度 2楼 加利福尼亚州 b5型

我有一个链接到我的输入文件,但似乎是一个mod删除了它。它是一个文件,每一行都有一个十六进制字节,用ASCII编写。在

编辑:解决了!多亏了扬抑。在

我有两个不同的文本文件,每个文件都有128字节的ASCII码。我把它们转换成二进制,然后用打击.pack并与MD5相撞。在


Tags: 文件txtclose字节bytesbinasciiopen
2条回答

如果要将它们写为原始字节,可以使用struct类型的pack()方法。在

您可以将MD5写成2个long long int,但必须以2个8字节的部分来编写它

http://docs.python.org/library/struct.html

编辑:

例如:

import struct

bytes = "6F"
byteAsInt = int(bytes, 16)
packedString = struct.pack('B', byteAsInt)

如果我没搞错,你是在试图拉入一些写有十六进制字符串的文本,把它们转换成二进制格式并输出?如果是这样的话,该代码应该能满足您的需要。在

它基本上将原始的十六进制字符串转换为int,然后将其以二进制形式(以字节形式)打包为字符串。在

您可以对输入字符串中的每个字节进行类似的循环

>>> import binascii
>>> binary = binascii.unhexlify("d131dd02c5")
>>> binary
'\xd11\xdd\x02\xc5'

^{}^{}中定义。下面是Python中的“接近C”实现:

^{pr2}$

如果没有binascii.unhexlify()bytearray.fromhex()或{}或类似内容,则可以写如下:

def unhexlify(s, table={"%02x" % i: chr(i) for i in range(0x100)}):
    if len(s) % 2 != 0: 
        raise TypeError("Odd-length string")
    try:
        return ''.join(table[top+bot] for top, bot in zip(*[iter(s.lower())]*2))
    except KeyError, e:
        raise TypeError("Non-hexadecimal digit found: %s" % e)

相关问题 更多 >