编辑代码

import sys

def calculate_can_filter(ids, frame_type='standard'):
    """ 计算CAN过滤器的ID和掩码(逻辑不变) """
    bit_length = 11 if frame_type == 'standard' else 29
    bin_ids = []
    for id_str in ids:
        id_int = int(id_str, 16)
        bin_str = bin(id_int)[2:].zfill(bit_length)
        bin_ids.append(bin_str)
    
    mask_bits = []
    id_bits = []
    for i in range(bit_length):
        bits_at_position = [bin_str[i] for bin_str in bin_ids]
        if all(b == bits_at_position[0] for b in bits_at_position):
            mask_bits.append('1')
            id_bits.append(bits_at_position[0])
        else:
            mask_bits.append('0')
            id_bits.append('0')
    
    mask_int = int(''.join(mask_bits), 2)
    id_int = int(''.join(id_bits), 2)
    
    return (
        f"0x{id_int:03X}" if frame_type == 'standard' else f"0x{id_int:08X}",
        f"0x{mask_int:03X}" if frame_type == 'standard' else f"0x{mask_int:08X}"
    )

if __name__ == "__main__":
    # 从标准输入读取数据
    try:
        # 读取输入并过滤空行
        input_lines = [line.strip() for line in sys.stdin if line.strip()]
        if not input_lines:
            print("错误: 未检测到输入内容")
            sys.exit(1)
        
        # 自动判断帧类型
        max_id = max(int(id_str, 16) for id_str in input_lines)
        frame_type = 'extended' if max_id > 0x7FF else 'standard'
        
        # 计算并输出结果
        id_result, mask_result = calculate_can_filter(input_lines, frame_type)
        print(f"ID: {id_result}\nMask: {mask_result}")
    
    except ValueError as e:
        print(f"输入格式错误: {str(e)}")
        sys.exit(1)
    except Exception as e:
        print(f"运行时错误: {str(e)}")
        sys.exit(1)