一次弄懂aardio中的数据类型转换

背景知识:

计算机中的数据都是以二进制方式存储的。它的基本存储单元是bit(翻译为位)。1个bit只能存储1个值,要么是0,要么是1。很多个bit连接起来,也就是0和1穿成串,就能存储数据了。

bit容量太小,于是人们将8个bit定义为一个更大的存储单元,叫做byte(翻译为字节)。1个byte可以存储2的8次方,也就是256个值,分别是0-255。很多个byte穿成串,也就能存储数据了。
因此也可以说,计算机中的数据都是以byte串方式存储的。

byte串也叫byte数组。计算机调取这些byte数组以后,根据应用场景,将其展现为整数、小数、字符串等各种形式。例如,当应用场景为字符串时,计算机就会认为byte数组中存储的值是字节码,然后按照编码规则,展现字符串。同一个byte数组,可以展现为不同的数据类型,但是展现成什么有意义,只有存储数据的人清楚。

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

import console; 

//一、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[i])
for (i=1;#buf2) console.print(buf2[i])
for (i=1;#buf2) console.print(buf3[i])//索引小的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[i])//.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[i])
//将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[i]=tonumber(tab[i],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[i] ))
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[i]=tonumber(bin[i],2)
}
console.log(buf)
//如果反过来将字符串ab0转换成二进制串呢?
//字符串一般可以直接当做byte数组使用,不过只能读取,不能写入。
var buf="ab0"
var bin={}
for (i=1;#buf){
	bin[i]=string.format("%08b",buf[i] )
}
var str=string.join(bin," ")
console.log(str)

console.pause(true);

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用aardio实现的简单深度学习案例: 该案例使用aardio和TensorFlow库来训练一个手写数字识别器。 1. 数据集准备 首先,需要准备手写数字图片数据集。我们使用MNIST数字数据集,该数据集包含60,000个训练图像和10,000个测试图像。 2. 模型构建 构建一个简单的卷积神经网络模型,其包含两个卷积层、两个池化层和两个全连接层。 ```aardio # 导入 TensorFlow 库 from tensorflow.keras import layers, models # 构建卷积神经网络模型 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10)) # 输出模型结构 model.summary() ``` 3. 模型训练 使用准备好的训练数据集对模型进行训练。设置损失函数和优化器,并且指定训练批次大小和总批次数。 ```aardio # 导入 TensorFlow 库 from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical # 加载 MNIST 数据集 (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 将数据集转换为模型需要的格式 train_images = train_images.reshape((60000, 28, 28, 1)) train_images = train_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_images = test_images.reshape((10000, 28, 28, 1)) test_images = test_images.astype('float32') / 255 test_labels = to_categorical(test_labels) # 编译模型,设置损失函数和优化器 model.compile(optimizer='rmsprop', loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 训练模型 history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.2) ``` 4. 模型评估 使用准备好的测试数据集对模型进行评估,并输出准确率。 ```aardio # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) ``` 以上就是一个简单的使用aardio和TensorFlow库来训练手写数字识别器的深度学习案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值