作用:将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