我想在Python 2.7.13中执行以下操作:
58829405413336430
应该变成d101085402656e
)我的代码当前如下所示:
mime=58829405413336430
payload="c9999"
fw_file=open('testhex', 'wb')
fw_file.write("%x" % mime)
fw_file.write(str(payload).encode("hex"))
fw_file.close()
我得到了以下文件(在Debian上使用xxd
):
这不是我需要的。我需要这样的文件:
xxd WORKING
00000000: d101 0854 0265 6e63 3939 3939 ...T.enc9999
我的理解是:
"%x" % mime
将我的int转换为十六进制,但它是作为字符串写入的。encode
做得很正确,但这对整数无效。我怎样才能避免这种行为并将“纯”十六进制写入我的文件?如果在python2中无法实现,我也可以使用python3。
因为这是我关于StackOverflow的第一个问题,请告诉我是否应该做些不同的事情。
问题的一部分是
"%x" % mime
的结果是一对十六进制字符的字符串(在本例中是十六进制字符对)-"d101085402656e"
的值,这就是写入文件的内容。然而,需要的是构成整数本身的实际字节值。在在Python3中,这可以很容易地解决,方法是使用一个名为^{} 的内置方法,该方法被添加到该版本中的
int
类型中,但在Python2.x中,必须用另一种方法来完成。在由于使用了}中已经存在的每个字符的实际字节值,这是需要的。幸运的是,在这种情况下,通过使用python2.x内置的^{} 类可以很容易地完成需要完成的工作。在
str(payload).encode("hex")
也返回了一个十六进制字符串表示形式,而不是{下面是我写的一个版本,它是作为answer的一部分发布到相关的question的函数,该函数可以处理
mime
值的问题。在在函数定义之后是代码,展示了在这种情况下如何使用它,以及
bytearray
类,以获得写入文件的正确二进制数据。在下面是它生成的
^{pr2}$testhex
文件内容的十六进制转储(使用python2.7.15):相关问题 更多 >
编程相关推荐