You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于NFC Forum Type 2标签NDEF文本记录写入格式的技术问询

解析NFC Forum Type 2标签的NDEF写入命令与内容

咱们一步步拆解你这几个写入数组和标签内容的含义,结合Type 2标签的TLV格式和NDEF记录规范来理清楚:

先明确基础规则

Type 2标签的用户数据区是用TLV(Tag-Length-Value)格式组织的,每个TLV块用来标记不同类型的数据;写入命令0xA2(也就是你看到的十进制162)是Type 2标签标准的WRITE指令,第二个字节是块地址(每个块4字节,前4个块(地址0-3)是标签预写入的元数据区,对应你说的前16字节)。


第一个写入数组:new Uint8Array([162, 4, 3, 10, 209, 1]).buffer

这个数组是往块地址4(对应标签第16-19字节)写入数据,核心内容是后4个字节[3,10,209,1]

  • 0x03:这是NDEF Message TLV的Tag,告诉读卡器接下来的内容是NDEF消息
  • 0x0A(十进制10):这个TLV的Length字段,表示后面的NDEF消息总长度是10字节
  • 0xD1:NDEF记录的Header字节,拆解二进制11010001能得到关键信息:
    • MB=1:这是NDEF消息的起始记录
    • ME=1:这是NDEF消息的结束记录(说明整个消息只有这一条记录)
    • SR=1:短记录模式,Payload长度用1字节表示
    • TNF=001:使用Well-Known Type(也就是NFC论坛定义的标准记录类型)
  • 0x01:Type Length字段,表示NDEF记录的Type字段长度是1字节

第二个写入数组:new Uint8Array([162, 5, 6, 84, 2, 101]).buffer

块地址5(标签第20-23字节)写入的内容是[6,84,2,101]

  • 0x06:Payload Length字段,因为是短记录模式,用1字节表示Payload总长度为6字节
  • 0x54(ASCII码'T'):Type字段,对应Well-Known Type里的Text Record(文本记录)
  • 0x02:Text Record的状态字节:
    • 最高2位00:表示文本编码是UTF-8
    • 低6位02:表示语言代码的长度是2字节
  • 0x65(ASCII码'e'):语言代码的第一个字节,和下一个块的0x6E组成英语代码en

第三个写入数组:new Uint8Array([162, 6, 110, 112, 111, 111]).buffer

块地址6(标签第24-27字节)写入的内容是[110,112,111,111]

  • 0x6E(ASCII码'n'):语言代码的第二个字节,和之前的e组成en(英语)
  • 0x70,0x6F,0x6F:就是你说的ASCII码poo,是文本记录的实际内容

这里补充下Text Record的Payload结构:状态字节(1) + 语言代码(2) + 文本内容(3),总长度正好是6,和之前的Payload Length0x06完全对应。


第四个写入数组:new Uint8Array([162, 7, 254, 0, 0, 48]).buffer

块地址7(标签第28-31字节)写入的内容是[254,0,0,48]

  • 0xFE:这是Terminator TLV的Tag,是Type 2标签的必填项,用来标记整个TLV数据序列的结束,告诉读卡器后面的字节都是无效填充数据
  • 0x00:Terminator TLV的Length字段,规范要求这个Length必须为0(因为Terminator不需要Value内容)
  • 后面的0x00,0x30(十进制48):只是标签的填充数据,没有实际意义,不用管

标签整体内容验证

把这些串起来,标签前16字节元数据之后的TLV序列就是:

  1. NDEF Message TLV(包含完整的Text Record)
  2. Terminator TLV(标记数据结束)
    完全符合NFC Forum Type 2标签的NDEF映射规范,你的测试文本poo也正确存储在Text Record的Payload里啦。

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

火山引擎 最新活动