找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

搜索
查看: 578|回复: 0

[转载] aardio中的数据类型的转换

[复制链接]
  • TA的每日心情
    慵懒
    2024-9-9 17:19
  • 签到天数: 111 天

    连续签到: 1 天

    [LV.6]常住居民II

    35

    主题

    142

    回帖

    1194

    积分

    金牌会员

    积分
    1194
    来自: 中国安徽
    发表于 2024-1-26 10:54:40 | 显示全部楼层 |阅读模式 来自: 中国安徽
    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    byte串也叫byte数组。计算机调取这些byte数组以后,根据应用场景,将其展现为整数、小数、字符串等各种形式。例如,当应用场景为字符串时,计算机就会认为byte数组中存储的值是字节码,然后按照编码规则,展现字符串。同一个byte数组,可以展现为不同的数据类型,但是展现成什么有意义,只有存储数据的人清楚。

    byte数组与其展现的特定数据之间,是本质与现象的关系,可以互相转换。这在aardio中是非常方便的。

    //一、Buffer——byte数组的表示方式【推荐】
    //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)

    console.pause(true);
    ————————————————

                                版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                            
    原文链接:https://blog.csdn.net/sunjichuancsdn/article/details/127706370
    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区

    GMT+8, 2024-9-17 03:47 , Processed in 0.117218 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表