二进制数据详细使用
1、byte模式的二进制读取
int bs; //bs是二进制数据的句柄
bs=newbin(256);//创建一个256字节的bin数组
//写一个数据
setbin(bs,2,127); //第二个字节写127
echo(getbin(bs,2)); //读取bin数组第二字节,显示127
freestr(bs);//释放空间
2、word模式(2byte)的二进制读取
int bs;//bs是二进制数据的句柄
bs=newbin(256);//创建一个256字节的bin数组
//写一个数据
setbin2(bs,2,65534); //第二个字节写65534
echo(getbin2(bs,2)); //读取bin数组第二字节,显示65534
freestr(bs);//释放空间
备注:
- getbin 和getbin2 可以混用 - bin2的位置的概念0号位置对应0字节;1号位置对应2字节;2号位置对应4字节
3、二进制数据的初始化
int bs;
bs=newbin(16);
defbin(bs,0,"00 01 00 02 00 03 00 0A 00 0B 00 10 00 12 00 14");
echo(getbin(bs,1)); //显示1
echo(getbin2(bs,1)); //显示512
4、有关getv的语句
- 本函数getv(bs,pos,1) 效果等同于getbin(bs,pos);
- 本函数和getbin2的差异在于:本函数的pos是按byte算的,而getbin2的pos是按word(2字节)一个单位计算的
- 本函数和setv更适合处理byte、word、long 混合存储的bin字符串
5、控件内使用
int bs; //控件属性
void create(){
bs=newbin(256);
}
void show(){
//getbin();
}
控件在初始化create的时候,newbin申请了空间,由于create只执行一次,因此不会导致空间不足
但是如果按照下面的代码:
void show(){
int bs;
bs=newbin(256);
......
}
这样是有问题,由于show函数是频繁调用的,因此不停的newbin申请内存,会导致内存不够而在运行一段时间后系统崩溃;
需要按以下修改:
void show(){
int bs;
bs=newbin(256);
......
freestr(bs);
}