python 工具 二进制文件处理之——大小端变换

本文介绍了一种用于将大端格式数据转换为小端格式数据的Python脚本实现,支持16位和32位的数据转换。该脚本能够处理二进制文件,并输出转换后的文件及十六进制形式的中间文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大端换小端 16位:

import struct
import sys


# main body
if sys.argv.__len__() > 1:
    # 参数获取
    src_file = sys.argv[1]
else:
    # 文本输入
    src_file = input("Source Bin Path: ")

dst_file = src_file[0:(src_file.__len__()-2)]
dst_i_file = dst_file
dst_file += "_le.bin"
dst_i_file += ".i"
print("Source file: {0}\nTarget File: {1}\n\t{2}".format(src_file, dst_file, dst_i_file))

sf = open(src_file, "rb")
df = open(dst_file, "wb")
dif = open(dst_i_file, "w")

buf_tmp = [b'0' for x in range(0, 2)]
contents = sf.read()
buf_size = contents.__len__()
extra_size = (buf_size % 2)
if extra_size > 0:
    buf_size += (2 - extra_size)
    contents = contents + b'0000'

for i in range(0, buf_size, 2):
    buf_tmp[1] = contents[i]
    buf_tmp[0] = contents[i+1]

    if (i > 0) and ((i % 16) == 0):
        dif.write("\n")
    for j in range(0, 2):
        dif.write(str.format("0x%02x," % buf_tmp[j]))

    # pack into bytes flow
    tmp_bytes = struct.pack("2B", buf_tmp[0], buf_tmp[1])
    df.write(tmp_bytes)

dif.close()
sf.close()
df.close()

print("Convert Completed!")

 

 

 

 

 

 

 

大端换小端 32位

import struct
import sys


# main body
if sys.argv.__len__() > 1:
    # 参数获取
    src_file = sys.argv[1]
else:
    # 文本输入
    src_file = input("Source Bin Path: ")

dst_file = src_file[0:(src_file.__len__()-4)]
dst_i_file = dst_file
dst_file += "_le.bin"
dst_i_file += ".i"
print("Source file: {0}\nTarget File: {1}\n\t{2}".format(src_file, dst_file, dst_i_file))

sf = open(src_file, "rb")
df = open(dst_file, "wb")
dif = open(dst_i_file, "w")

buf_tmp = [b'0' for x in range(0, 4)]
contents = sf.read()
buf_size = contents.__len__()
extra_size = (buf_size % 4)
if extra_size > 0:
    buf_size += (4 - extra_size)
    contents = contents + b'0000'

for i in range(0, buf_size, 4):
    buf_tmp[3] = contents[i]
    buf_tmp[2] = contents[i+1]
    buf_tmp[1] = contents[i+2]
    buf_tmp[0] = contents[i+3]

    if (i > 0) and ((i % 16) == 0):
        dif.write("\n")
    for j in range(0, 4):
        dif.write(str.format("0x%02x," % buf_tmp[j]))

    # pack into bytes flow
    tmp_bytes = struct.pack("4B", buf_tmp[0], buf_tmp[1], buf_tmp[2], buf_tmp[3])
    df.write(tmp_bytes)

dif.close()
sf.close()
df.close()

print("Convert Completed!")

 

转载于:https://www.cnblogs.com/dzzy/p/9082869.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值