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