@concept:NDEF NFC Form论坛定义的NFC数据交换通用数据格式。
如上所示:一条NDEF消息由诸多Record记录组成,Record又由Header和Payload组成,Header定义了Payload的ID 长度与ID,携带数据的格式与格式长度,携带的数据的字节数。
Header的具体结构如下图:
第一个字节是状态字节(1byte=8bit),用于指定Record有无ID,该Record是首记录还是尾记录,是长记录还是短记录,以及关键的Record的类型。
Record的类型可以有一下8种,Type指定的是载荷Payload的类型。
常见的Payload类型有:Text、URI、MIME类型,TNF_WELL_KNOWN类型的Record类型,有以下几种Payload类型。
本文重点关注RTD_TEXT类型的解析,Payload类型为RTD_TEXT的Payload结构如下。
第一个字节(1byte)是状态标志位,位定如下:
这个状态字节0-5位定义了语言码的长度,最高位MSB定义文本的编码格式。注意语言码和文本编码是两个概念,前面定义了语言码长度,紧接着Payload第二个字节开始就定义了对应长度的语言码字节。语言码之后的字节就是文本的字节(实际的内容),文本的编码方式就是MSB位定义的编码格式。
相关解析代码如下所示:0200是八级制对应十六进制0x80,最后解析出来的字符串放在payloadStr字符变量中。
大致流程为:取Record状态字节,根据文本编码方式以及语言码长度取出语言码,根据文本的编码方式将文本内容对应的字节按照相应编码格式转换为字符串。