pycharm · 2026年3月11日

卡号(4字节)的大小端转换(python实现)

作用:将10进制卡号 -> 4字节16进制 -> 高低字节转换 -> 10进制卡号

# 10进制卡号转换函数
# 高低字节转换

def convert_card_number(decimal_num):
    """
    将10进制卡号按指定规则转换:
    1. 10进制转16进制(去除0x前缀,补8位,大写)
    2. 16进制字符串按2位一组反转(大小端交换)
    3. 交换后的16进制转回10进制
    """
    try:
        # 步骤1:10进制转16进制,去除0x前缀,补8位(不足补0),转大写
        hex_str = hex(decimal_num)[2:].zfill(8).upper()

        # 步骤2:按2位一组拆分,反转(大小端交换),再拼接
        hex_groups = [hex_str[i:i + 2] for i in range(0, len(hex_str), 2)]
        reversed_hex = ''.join(reversed(hex_groups))

        # 步骤3:交换后的16进制转回10进制
        final_decimal = int(reversed_hex, 16)
        return final_decimal
    except ValueError as e:
        print(f"转换失败:输入的数字 {decimal_num} 不是有效的10进制数,错误信息:{e}")
        return None


def process_card_file(input_file, output_file):
    """
    从输入文件读取卡号,转换后写入输出文件
    :param input_file: 输入文件路径(card.txt)
    :param output_file: 输出文件路径(card_new.txt)
    """
    # 存储转换结果(原始卡号: 转换后卡号)
    conversion_results = {}

    # 1. 读取并处理输入文件
    try:
        with open(input_file, 'r', encoding='utf-8') as f:
            lines = f.readlines()

        for line_num, line in enumerate(lines, 1):
            # 去除换行符、空格,跳过空行
            card_num_str = line.strip()
            if not card_num_str:
                print(f"第{line_num}行是空行,跳过")
                continue

            # 转换为整数并处理
            try:
                original_card = int(card_num_str)
                converted_card = convert_card_number(original_card)

                if converted_card is not None:
                    conversion_results[original_card] = converted_card
                    print(f"第{line_num}行:{original_card}{converted_card}")
                else:
                    print(f"第{line_num}行 '{card_num_str}' 转换失败,跳过")
            except ValueError:
                print(f"第{line_num}行 '{card_num_str}' 不是有效的10进制卡号,跳过")

    except FileNotFoundError:
        print(f"错误:未找到输入文件 {input_file}")
        return False

    # 2. 将结果写入输出文件
    try:
        with open(output_file, 'w', encoding='utf-8') as f:
            # 按原始顺序写入转换后的结果(仅保留转换后的值)
            # 如果需要同时保留原始卡号和转换后卡号,可修改为:f.write(f"{original}\t{converted}\n")
            for original in conversion_results.keys():
                f.write(f"{conversion_results[original]}\n")

        print(f"\n转换完成!结果已保存到 {output_file}")
        print(f"共成功转换 {len(conversion_results)} 个卡号")
        return True

    except Exception as e:
        print(f"写入输出文件失败:{e}")
        return False


# ==================== 执行转换 ====================
if __name__ == "__main__":
    # 输入/输出文件路径(可根据实际路径修改)
    INPUT_FILE = "card.txt"
    OUTPUT_FILE = "card_new.txt"

    # 执行批量转换并保存
    process_card_file(INPUT_FILE, OUTPUT_FILE)
Python