天天看點

[轉載]NDEF編碼格式解析執行個體

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記錄可簡化為如下結構
           
nfc

繼續閱讀