//aardio提供了raw.buffer()函数,直接生成byte数组。使用方法如下: var buf1=raw.buffer(4,1) //生成长度为4的byte数组,每个byte初始值为1。省略参数2则初始值为0。 var buf2=raw.buffer("ABCD")//复制字符串abcd对应的byte数组,不影响原字符串。 var buf3=raw.buffer({int num=1234}) //复制整数1234对应的byte数组,用到了结构体。 //输出看看 for (i=1;#buf1) console.print(buf1) for (i=1;#buf2) console.print(buf2) for (i=1;#buf2) console.print(buf3)//索引小的byte代表低位,索引大的byte代表高位。
二、byte[]——byte数组的另一种表示方式【不推荐】
//aardio是动态语言,一般不需要声明数据类型,而是根据应用场景自动转换。 //通过结构体可以显示声明数据类型。 //结构体可以先创建类,再实例化,也可以直接声明。 //结构体就是在哈希表的键名前标注数据类型,例如上面用到的{int num=1234}。 var buf4={ byte b[4]={11,22,33,44}//键名可以随意起,前后一致就可以。 } for (i=1;#buf4.b) console.print(buf4.b)//.b不可省略。
三、Convert——专门用于数据类型转换的函数
//前面介绍的raw.buffer已经可以将字符串、结构体转换为byte数组。 //aardio还提供了raw.convert(),专门进行数据转换。例如: //将小数123.456转换为byte数组: var from={double d=123.456} var to=raw.buffer(8) var buf5=raw.convert(from,to) for (i=1;#buf5) console.print(buf5) //将byte数组转换为小数123.456: var n=raw.convert(buf5,{double n}).n//.n不可省略 console.log(n) //将byte数组转换为整数呢? var n=raw.convert(buf5,{int n}).n console.log(n) //如果直接输出,相当于展现为字符 console.log(buf5)//可以输出,但是乱码无意义
四、byte数组与十六进制的转换(一)
//群友问题:aardio数组3F F0 5E 35 3F 7C ED 91如何转double(1.023)?
//这里给出的不是数组,而是字符串,我们先转换为数组 var tab=string.split("3F F0 5E 35 3F 7C ED 91"," ") //生成byte数组,为下面转换作准备 var buf=raw.buffer(8) for (i=1;8) buf=tonumber(tab,16) buf=string.reverse(buf)//索引小的byte代表低位(字符串右端) //byte数组转为double var n=raw.convert(buf,{double n}).n console.log(n)
//上面题目的另一种算法 var str =string.replace("3F F0 5E 35 3F 7C ED 91"," ","") var hex="0X"++str var n=raw.convert({long hex=hex},{double n}).n console.log(n)
五、byte数组与十六进制的转换(二)
//群友问题:0xAABBCCDD如何转换为内存字节的形式,如:DD CC BB AA //这里给出的不是字符串,不应该直接按照字符串进行处理。 var buf=raw.buffer({int hex=0xAABBCCDD}) //这样实际已经转换完成了。但是群友要的是输出形式是16进制。 var tab={} for (i=1;#buf) table.push(tab,string.format("%02X",buf )) var str=string.join(tab," ") console.log(str)
六、字符串与二进制的转换
//群友问题:如何将二进制串"01100001 01100010 00110000"转换为字符串 var str="01100001 01100010 00110000" var bin=string.split(str," ") var buf=raw.buffer(#bin) for (i=1;#buf){ buf=tonumber(bin,2) } console.log(buf) //如果反过来将字符串ab0转换成二进制串呢? //字符串一般可以直接当做byte数组使用,不过只能读取,不能写入。 var buf="ab0" var bin={} for (i=1;#buf){ bin=string.format("%08b",buf ) } var str=string.join(bin," ") console.log(str)