You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按位宽规则实现大端hex格式vcon文件转小端格式

.vcon大端十六进制转小端实现方法

核心转换逻辑:大小端转换的本质是反转多字节数据块内的字节顺序,8位(1字节)数据无需调整顺序,16位(2字节)、32位(4字节)、64位(8字节)数据只需将块内字节倒序排列即可。

  • 基础换算规则:1字节对应2个十六进制字符,因此单个块对应的十六进制截取长度 = 位宽 / 4(例:16位对应4个字符,32位对应8个字符)
  • 预处理环节:读取.vcon文件内的十六进制字符串,删除所有换行、空格等无关字符;校验位宽列表合法性,确保总位宽对应的字符长度和十六进制字符串长度匹配,位宽取值仅支持8、16、32、64
  • 逐块转换流程:维护一个初始值为0的读取偏移量,逐个遍历位宽列表中的值:
    • 计算当前块需要截取的十六进制字符长度,从偏移量位置截取出当前块的大端子串
    • 位宽为8时,直接保留子串内容
    • 位宽为16/32/64时,将子串按每2个字符切分为单个字节的十六进制表示,把切分后的字节列表倒序拼接,即为当前块的小端内容
    • 将处理后的块内容追加到结果中,偏移量向后移动当前块的字符长度,继续处理下一个块
  • 结果输出:将所有块拼接完成的小端十六进制字符串写入新的.vcon文件即可。

转换逻辑匹配示例验证:
输入大端串:F324658951425AF3EB0011
位宽列表:[16, 8, 8, 32, 8, 16]
逐块处理结果:

  1. 16位块:截取F324,切为['F3','24']倒序得24F3
  2. 8位块:截取65,直接保留得65
  3. 8位块:截取89,直接保留得89
  4. 32位块:截取51425AF3,切为['51','42','5A','F3']倒序得F35A4251
  5. 8位块:截取EB,直接保留得EB
  6. 16位块:截取0011,切为['00','11']倒序得1100
    最终拼接结果:24F36589F35A4251EB1100,和预期结果完全一致。

可直接运行的Python实现代码:

def convert_vcon_endian(input_file_path, output_file_path, bit_width_list):
    # 读取输入文件,去除所有空白字符
    with open(input_file_path, 'r', encoding='utf-8') as f:
        hex_str = ''.join(f.read().split())
    
    # 输入合法性校验
    total_bits = sum(bit_width_list)
    assert total_bits % 8 == 0, "位宽总和必须是8的倍数"
    total_bytes = total_bits // 8
    assert len(hex_str) == total_bytes * 2, "十六进制字符串长度与位宽列表不匹配"
    for bw in bit_width_list:
        assert bw in (8, 16, 32, 64), f"不支持的位宽值{bw},仅支持8/16/32/64"
    
    offset = 0
    result = []
    for bw in bit_width_list:
        char_len = bw // 4
        block = hex_str[offset:offset+char_len]
        if bw == 8:
            result.append(block)
        else:
            # 按单字节切分后倒序拼接
            byte_list = [block[i:i+2] for i in range(0, char_len, 2)]
            little_endian_block = ''.join(reversed(byte_list))
            result.append(little_endian_block)
        offset += char_len
    
    # 写入输出文件
    final_hex = ''.join(result)
    with open(output_file_path, 'w', encoding='utf-8') as f:
        f.write(final_hex)
    return final_hex

# 调用示例
if __name__ == "__main__":
    # 替换为实际的位宽列表、文件路径即可
    bit_width_config = [16, 8, 8, 32, 8, 16]
    convert_vcon_endian("input.vcon", "output.vcon", bit_width_config)

内容的提问来源于stack exchange,提问作者grace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:36:17