aLoNe IT Develop Studio

  • 首页
  • IT前沿
  • Web技术
  • 小姿势
  • 运维管理
  • 随笔
欢迎来到aLoNe.Adams.K的个人博客
  1. 首页
  2. 小姿势
  3. 正文

NDEF消息解析实例

2017年11月14日 4703点热度 0人点赞 0条评论

问题:按照NDEF消息格式来解析下列Hex串:

D1 02 1F 53 70 91 01 0E 54 02
65 6E 68 65 6C 6C 6F 20 77 6F
72 6C 64 51 01 09 55 01 73 69
6E 61 2E 63 6F 6D

解答:NDEF记录格式如下,

Byte 0: D1
0xD1 = 11010001B,对应的标志位如下:
MB(Message Begin) = 1,说明这是首记录
ME(Message End) = 1,说明这是末记录(说明消息只有一个记录)
CF(Chunk Flag) = 0,说明记录未被切块
SR(Short Record) = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
IL(ID_LENGTH field is present) = 0,说明没有 ID_LENGTH 和 ID 域
TNF(Type Name Format) = 1,说明TYPE类型是 NFC Forum well-known type [NFC RTD],下表是TNF编码对应表

667E7AA9481C4FBAA527D703B6FFDFAB

因为SR=1且IL=0,所以NDEF记录可简化为如下结构

521A1F9D51BB448DB99988B6CEABB19A

Byte 1: 02
TYPE_LENGTH = 2,TYPE域长度为2

Byte 2: 1F
PAYLOAD_LENGTH = 0x1F,Payload域长度为31

Byte 3-4: 53 70
TYPE = "Sp",因为TYPE域长度为2,所以此处TYPE取2个字节

此后全是PAYLOAD域的内容,因为TYPE="Sp",所以需要使用的Spec是“Smart Poster Record Type Definition”

智能海报的记录类型其实也是一个NDEF消息。没错,NDEF记录的PAYLOAD域可以存放任何东西,包括嵌套NDEF消息。

智能海报的内容可以包括标题、URI、动作、图标、大小、类型等记录,其中URI记录是必须有的,其他的可选,次序无所谓。

现在将智能海报的内容贴过来,如下

91 01 0E 54 02 65 6E 68 65 6C
6C 6F 20 77 6F 72 6C 64 51 01
09 55 01 73 69 6E 61 2E 63 6F
6D

Byte 0: 91
0x91 = 10010001B,对应的标志位如下:
MB = 1,说明这是首记录
ME = 0,说明后面还有记录
CF = 0,说明记录未被切块
SR = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
IL = 0,说明没有 ID_LENGTH 和 ID 域
TNF = 1,说明TYPE类型是 NFC Forum well-known type

Byte 1: 01
TYPE_LENGTH = 1,TYPE域长度为1

Byte 2: 0E
PAYLOAD_LENGTH = 0x0E,Payload域长度为14

Byte 3: 54
TYPE = "T",说明是文本记录类型,适用“Text Record Type Definition”

Byte 4-17: 02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64
这是文本记录的内容

下面对“02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64”按照文本记录格式解码。

文本记录格式如下:

80E3633DDCB34AEA9062EA3CDAAAEF1D

Byte 0: 02
Status = 2,由下表可知,IANA语言码长度=2

338DC7DAD98949AE8DBE4AE8927EB51A

Byte 1-2: 65 6E
ISO/IANA语言码 = “en”,编码为US-ASCII码

Byte 3-13:68 65 6C 6C 6F 20 77 6F 72 6C 64
按照ASCII码解码可得“hello world”

至此,对海报内容的第一条NDEF记录解码完成,接下来是对剩余内容解码。

剩余内容为“51 01 09 55 01 73 69 6E 61 2E 63 6F 6D”,同样也是按照NDEF记录来解码。

Byte 0: 51
0x91 = 01010001B,对应的标志位如下:
MB = 0,说明这不是首记录
ME = 1,说明这是末记录
CF = 0,说明记录未被切块
SR = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
IL = 0,说明没有 ID_LENGTH 和 ID 域
TNF = 1,说明TYPE类型是 NFC Forum well-known type

Byte 1: 01
TYPE_LENGTH = 1,TYPE域长度为1

Byte 2: 09
PAYLOAD_LENGTH = 0x09,Payload域长度为9

Byte 3: 55
TYPE = "U",说明是URI记录类型,适用“URI Record Type Definition”

Byte 4-12: 01 73 69 6E 61 2E 63 6F 6D
这是URI记录的内容

URI记录内容格式如下:

05EA9C2459AB41FB9672C0910970F08E

Byte 0: 01
ID码 = 1,由下表可知,对应的协议是“http://www.”

B92416A1FD6D46888078DF17DAC65F9B

8B743DF0172D4BFEBCC98C954BD34886

95CB85B9BD804FC2AA3DA6C4B0A13D42

Byte 1-8: 73 69 6E 61 2E 63 6F 6D
按照UTF-8格式解码可得:“sina.com”

至此,整个NDEF消息解码完毕。

回顾一下吧,整个结构的解码将其如下分解:

D1 02 1F 53 70 <-- 智能海报
91 01 0E 54 02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64 <-- 文本
51 01 09 55 01 73 69 6E 61 2E 63 6F 6D <-- URI

到这里,基本上对NDEF消息的解码应该没问题了吧。

原文地址:https://note.youdao.com/share/?id=8b45d342e34d2bce0fade2218bafd79c&type=note#/

标签: 暂无
最后更新:2017年11月14日

aLoNe.Adams.K

一只胖菜鸟!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章分类
  • IT前沿 / 3篇
  • Web技术 / 2篇
  • 小姿势 / 24篇
  • 运维管理 / 5篇
  • 随笔 / 3篇
标签聚合
反向代理 google 虚表 sqlite debian Yum CentOS Orange Pi
最新 热点 随机
最新 热点 随机
团队开发规范培训(代码管理篇) 团队开发规范培训(序) 忆 我的座右铭 DevilBox全程操作记录 香橙派Orange Pi Zero基于Debian进行反向代理配置
全球首个微信应用号开发教程!通宵吐血赶稿,每日更新! 手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】 MySQL创建数据库并授权的SQL 改写历史,永久删除git库的物理文件 关于Framaroot的PC端控制方法 Thinkphp5开发中的坑及解决方案!
友情连接
  • 李建伟博客
  • 不忘初心的简书
归档
  • 2022年12月 / 5篇
  • 2022年6月 / 1篇
  • 2022年2月 / 3篇
  • 2020年11月 / 1篇
  • 2018年12月 / 1篇
  • 2018年5月 / 1篇
  • 2018年3月 / 1篇
  • 2017年11月 / 1篇
  • 2017年8月 / 1篇
  • 2017年3月 / 2篇
  • 2017年1月 / 1篇
  • 2016年9月 / 16篇

COPYRIGHT © 2022 aLoNe IT Develop Studio. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19021656号-2