Горькая кола 2024-03-29 21:43 采纳率: 0%
浏览 9

NFC扇区10始终无法修改

img


这个“-”是什么,为什么把卡中的“F”改为“-”会变成“0”。
求解答

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-29 21:43
    关注

    引自免费微信小程序:皆我百晓生

    在 NFC 卡(Near Field Communication,近场通信)中,扇区通常被划分为不同的单元,每个单元包含特定的数据信息和对应的扇区ID。这些扇区ID通常是根据卡片芯片的功能、应用场景以及数据类型等因素设计的。

    在您的问题中,描述了一个扇区ID "MCT",它与扇区名 "10" 相同,但在数据中出现了特殊的 "F" 字符(浮点数),这可能是为了存储某些特定的信息或用来表示偏移量。

    根据F 字符的含义,F 或者 "FF" 表示负数(即值小于零)。当原始数据为负时,其左上角的 F 字符会被替换为 "-"。这样做的目的是减去扇区内的有效值,以防止计算出扇区的实际大小而出现误差。

    在 NFC 中,实际扇区大小可以通过扇区 ID 来确定,但每种类型的 NFC 卡可能有不同的编码规则,这些编码规则可能允许特定格式的扇区 ID 存储数值。例如,NFC 标准中使用的是 GFSK 波形,并且支持 16 进制和 8 进制扇区 ID 的组合。

    以下是一种可能的解码方案:

    import struct
    
    # 转储数据(从扇区 ID 10 开始)
    data = b'F123456789012345678901234567890123456789012345678901234567890'
    
    # 解码扇区 ID
    扇区_id = struct.unpack("<H", data)[0]
    
    # 获取扇区的当前有效值
    current_value = struct.unpack("<I", data)[0] & 0xFF
    
    # 如果扇区是负的,将其赋值给 F 字符
    if current_value < 0:
        data = data[2:] + b"-"
    
    # 扇区 ID 和当前有效值的差值作为调整后的扇区 ID
    adjusted扇区_id =扇区_id - current_value
    
    # 修正扇区 ID,使最终得到的扇区名称与原始扇区名称相同
    if adjusted扇区_id > 0:
       扇区_name = '10'
    else:
       扇区_name = '10-0000000000000000000000000000000000000000000000000000000000000000'
    
    print(f"扇区 ID '{扇区_id}' 的原始有效值为 {current_value}。")
    print(f"调整后的扇区 ID '{adjusted扇区_id}'(保留负号部分)的值为 {adjusted扇区_id}。")
    print("扇区名称改变为:",扇区_name)
    

    这个例子中,我们首先读取扇区 ID,然后获取扇区的当前有效值。如果扇区是负的,我们就将它加到扇区 ID 的右侧,从而得到一个正数的扇区 ID。

    接着,我们将扇区 ID 与当前有效值的差值作为调整后的扇区 ID 存储起来。然后,我们检查调整后的新扇区 ID 是否大于 0,如果是,则将其赋值给原来的扇区名称,否则保留原始扇区名称。

    这个解码过程通过结构化字符串的方式来处理 NDEF 数据,确保了能够正确地解读扇区 ID 与有效值的关系,并进行必要的调整。注意,这段代码需要先安装必要的库 struct,并运行预编译的 Python 文件。如果未安装此库,可以使用以下命令进行安装:

    pip install struct
    

    以上就是如何解决这个问题的解码方案,具体的实现取决于您的 NFC 卡的编码规则以及要保存的扇区数据的具体内容。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日