binstr二进制字符串
str字符串是一个以0x00结尾的asc码序列的字符串,也就是非二进制安全的数据串,在日常应用中我们需要用字符串来存储一堆数据,比如曲线的采集数据,而这个数据需要二进制安全,因此我们允许使用二进制安全的字符串,这就是binstr
二进制字符串操作的核心是需要一个句柄来标示字符串,因此在创建,获取各个方面都需要这个句柄(所谓的句柄实际上是一个整形数字,可以理解为编号,或者id号)
binstr分为2中,一种是一字节的二进制数据,一种是二字节的二进制数据,分别如下:
模式 | 1字节(u8) | 2字节(u16) |
---|---|---|
创建 | newbin(u8数量) | newbin(u16数量*2) |
读取 | getbin | getbin2 |
写入 | setbin | setbin2 |
关于二进制字符串内存的释放
控件内使用
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);
}
目录:
defbin:初始化一个二进制字符串
freestr:释放字符串空间
getadbyval:非线性传感器值逆计算
getbin:读取二进制字符串的某个字节值
getbin2:读取二进制字符串的某个u16值
getbinstr:从bin中获取一个字符串
getmax2:获取二进制字符串的最大u16值
getv:从二进制字符串中读取一个数值
getvalbyad:非线性传感器值计算
newbin:创建一个二进制字符串
setbin:修改二进制字符串的某个字节值
setbin2:修改二进制字符串的某个u16字节值
setbinstr:将一个字符串写入二进制数据中
setv:向二进制字符串中写一个数值