Blob数据类型的使用:
blob{200} bl_var // 定义一个初始大小为200字节blob
blob bl_var // 普通定义方法,零长度blob
bl_var = Blob(Space(200)) // 动态分配200个字节,实际上是分配了一个200字符的字符串,全部为空格(ASCII码20H),最后转换为blob。也就是开辟了一个200字节的内存区,内容都是20H,而不是00H。全部初始化为全零的变通方法:(DX有更直接方法吗?)
blob bl_var
bl_var = Blob(Space(200))
for i = 1 to Len(bl_var)
BlobEdit(bl_var, i, Char(0))
next
// BlobEdit()用于修改一个blob变量指定位置的值,修改值可以是任何类型(转换到blob字节)。
但是有个奇特的地方,PB会把char看作string,当写入了一个非零的字符(char)时,字符串以零字符结束,因此实际上修改了blob变量的两个字节(一个是字符本身,一个是零字节),解决方法是Blob(some_char),因为用Blob来转换字符串时,只有有效字符被转换,结尾的零字符会被忽略。而Blob(Char(0))将会返回一个空值,因为PB把char(0)作为零长度的字符串处理。
当修改值超出blob变量的范围时,该次修改将不起作用!
// 对blob变量作逐字节处理的方法:
// bl_source已经初始化,i是要处理的字节位置
blob{1} bl_byte // 声明单字节长度的blob
int li_byte
bl_byte = BlobMid (bl_source, i, 1) // Extract a byte
li_byte = Asc(String(bl_byte)) // 转换到整型
... // 对li_byte的值作任意处理,处于0-255单字节取值范围内
// 字节内容处理后再放回去
if li_byte = 0 then
BlobEdit(bl_source, i, Char(0)) // 写入00H
else
BlobEdit(bl_source, i, Blob(Char(li_byte)))
end if
Blob数据类型的使用
最新推荐文章于 2024-06-20 10:33:02 发布