https://blog.csdn.net/qq_35002379/article/details/85115082
NDEF消息解析執行個體
問題:按照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
解答:
(1)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編碼對應表
因為SR=1且IL=0,是以NDEF記錄可簡化為如下結構
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”
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
(2)智能海報的記錄類型其實也是一個NDEF消息。沒錯,NDEF記錄的PAYLOAD域可以存放任何東西,包括嵌套NDEF消息。
智能海報的内容可以包括标題、URI、動作、圖示、大小、類型等記錄,其中URI記錄是必須有的,其他的可選,次序無所謂。
1)現在将智能海報的内容貼過來,如下
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”按照文本記錄格式解碼。
文本記錄格式如下:
Byte 0: 02
Status = 2,由下表可知,IANA語言碼長度=2
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記錄解碼完成,接下來是對剩餘内容解碼。
2)剩餘内容為“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記錄内容格式如下:
Byte 0: 01
ID碼 = 1,由下表可知,對應的協定是“http://www.”
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
原文來自:http://note.youdao.com/share/?id=8b45d342e34d2bce0fade2218bafd79c&type=note
NDEF消息解析執行個體
問題:按照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
解答:
(1)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編碼對應表
因為SR=1且IL=0,是以NDEF記錄可簡化為如下結構