首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python将字节反转AB CD到CD AB

使用python将字节反转AB CD到CD AB
EN

Stack Overflow用户
提问于 2013-01-27 08:18:11
回答 5查看 45K关注 0票数 6

我有一个.bin文件,我想简单地对十六进制数据进行字节反转。例如@ 0x10,它读取AD DE DE C0,希望它读取DE AD C0 DE。

我知道有一种简单的方法可以做到这一点,但我是初学者,刚刚学习python,正在尝试编写一些简单的程序来帮助我完成日常任务。我想这样转换整个文件,而不仅仅是0x10。

我将在起始偏移量0x000000处转换,块大小/长度为1000000。

这是我的代码,也许你可以告诉我该怎么做。我确信我只是没有理解它,而且我对编程和python也是新手。如果你能帮助我,我将不胜感激。

代码语言:javascript
复制
def main():
    infile = open("file.bin", "rb")
    new_pos = int("0x000000", 16)
    chunk = int("1000000", 16)
    data = infile.read(chunk)
    reverse(data)

def reverse(data):
    output(data)

def output(data):
    with open("reversed", "wb") as outfile:
        outfile.write(data)

main()

您可以看到用于反转的模块,我尝试了许多不同的建议,它要么原封不动地传递文件,要么抛出错误。我知道模块反向现在是空的,但我已经尝试了所有的方法。我只需要模块反转来转换AB CD到CD AB。感谢您的意见

编辑:文件大小为16MB,我想颠倒整个文件的字节顺序。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-27 10:55:03

代码语言:javascript
复制
>>> original = '\xAD\xDE\xDE\xC0'
>>> ''.join([c for t in zip(original[1::2], original[::2]) for c in t])
'\xde\xad\xc0\xde'

在Python 3中,二进制文件被读取为字节。只需稍加修改即可构建另一个字节数组:

代码语言:javascript
复制
>>> original = b'\xAD\xDE\xDE\xC0'
>>> bytes([c for t in zip(original[1::2], original[::2]) for c in t])
b'\xde\xad\xc0\xde'

您还可以在struct module中使用<> endianess格式代码来实现相同的结果:

代码语言:javascript
复制
>>> struct.pack('<2h', *struct.unpack('>2h', original))
'\xde\xad\xc0\xde'

快乐byte swapping :-)

票数 13
EN

Stack Overflow用户

发布于 2015-08-06 20:42:54

在Python 3.4中,您可以使用以下命令:

代码语言:javascript
复制
>>> data = b'\xAD\xDE\xDE\xC0'
>>> swap_data = bytearray(data)
>>> swap_data.reverse()

结果是

代码语言:javascript
复制
bytearray(b'\xc0\xde\xde\xad')
票数 16
EN

Stack Overflow用户

发布于 2017-10-08 14:46:11

代码语言:javascript
复制
data = b'\xAD\xDE\xDE\xC0'
reversed_data = data[::-1]
print(reversed_data)
# b'\xc0\xde\xde\xad'
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14543065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档