我给你举个例子方便快速理解:
TLV 是 tag , length 和 value 的缩写.一个基本的数据元就包括上面三个域. Tag 唯一标识该数据元, length 是 value 域的长度. Value就是数据本身了. 举个例子, 下面是一个tlv格式的AID(应用标识符)字节串” 9F0607A0000000031010 ”, 其中 9F06 是tag, 07 是长度, A0000000031010 就是AID本身的值了.
对于程序编写人员来说,如果有类似上面这样的一串TLV编码的字节串从卡片传过来, 怎么样从中提取我们想要的数据. 这就牵扯出TLV解码的问题了
TLV一种可变格式,TLV的意思就是:Type类型, Lenght长度,Value值;
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析方法:
1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
3.根据得到的长度读取value,指针偏移+Length;
TLV编码就是指先对Tag编码,再对Length编码,最后对Value编码。
这个是javascript代码吧?如果是的话,需要找到不带mini的那个文件名的.js文件,那里面是完整未优化的程序代码,比较容易读,你提供的这个代码是为了节约网络传输资源的优化后版本,所有定义都变成唯一标识符了,看不出意思,没法读的。//1.var A = prompt("输入A的值","")
var B = prompt("输入B的值","")
var tmp = A
A = B
B = tmp
console.log("A:" + A + ",B:" + B)
//2.
var num = 1234
var str = num + ""
console.log("是" + str.length + "位数")
for(var i = str.length - 1 i >= 0 i--){
console.log(str.charAt(i))
}
//3.
var sum = 0
for(var i = 0 i < 100 i++){
var rand = Math.floor(Math.random() * 10)
sum += rand
}
console.log(sum)
//4.
var A
while(true){
A = prompt("输入一个整数","")
if(A % 1 != 0){
continue
}
var isPrime = true
for(var i = 2 i <= A/2 i++){
if(A % i == 0){
isPrime = false
break
}
}
if(isPrime){
alert(A + "是素数")
}else{
alert(A + "不是素数")
}
break
}
//5.
var n = 2,
a = 1,
b = 2,
c = b / a
while (n <= 20) {
var tmp = a
a = b
b = tmp + b
c += b / a
n++
}
console.log(c)