文章目录
转换BLOB
BLOB转为Byte字节流
BLOB转为Char字节流
BLOB转为二进制字符
BLOB转为十六进制字符
生成BLOB
Byte字节流转为BLOB
Char字节流转为BLOB
二进制字符转为BLOB
十六进制字符转为BLOB
源代码
发现BUG请留言或私信,以便修正(QQ:768310524 TEL:18649713925)
代码拷贝到文本编辑器,另存为 n_func_blob.sru
代码中用到的类n_func_radix参见另一篇文章:PB实现进制转换
$PBExportHeader$n_func_blob.sru
forward
global type n_func_blob from nonvisualobject
end type
end forward
global type n_func_blob from nonvisualobject autoinstantiate
end type
type variables
private:
n_func_radix fradix
end variables
forward prototypes
public function string blob2hex (blob blb)
public function string blob2bin (blob blb)
public function blob bytearray2blob (byte b[])
public function blob bin2blob (string bin)
public function blob hex2blob (string hex)
public function blob chararray2blob (character ch[])
public function long blob2bytearray (blob blb, ref byte b[])
public function long blob2chararray (blob blb, ref character ch[])
public function long slice (blob blb, integer length, ref blob rblb[])
public function blob fill (byte b, long length)
end prototypes
public function string blob2hex (blob blb);byte b[]
char hex[]
long i,j,ll
string h
b = GetByteArray(blb)
ll = upperbound(b)
for i = 1 to ll
h = fradix.Byte2Hex(b[i])
j ++
hex[j]= left(h , 1)
j ++
hex[j] = right(h , 1)
next
return hex
end function
public function string blob2bin (blob blb);char binchar[],bin[]
long i,j,ll
byte b[]
ll = this.Blob2ByteArray(blb,b)
for i = 1 to ll
binchar = fradix.Byte2Bin(b[i])
j ++
bin[j] = binchar[1]
j ++
bin[j] = binchar[2]
j ++
bin[j] = binchar[3]
j ++
bin[j] = binchar[4]
j ++
bin[j] = binchar[5]
j ++
bin[j] = binchar[6]
j ++
bin[j] = binchar[7]
j ++
bin[j] = binchar[8]
next
return bin
end function
public function blob bytearray2blob (byte b[]);return Blob(b)
end function
public function blob bin2blob (string bin);int p
byte b[]
long i,j,ll
p = mod(len(bin) , 8)
if p <> 0 then p = 8 - p
bin = fill("0",p) + bin
ll = len(bin) / 8
j = 1
for i = 1 to ll
b[i] = fradix.Bin2Byte(mid(bin,j,8))
j += 8
next
return Blob(b)
end function
public function blob hex2blob (string hex);
if mod(len(hex),2) <> 0 then hex = "0" + hex
long i,j,ll
byte b[]
ll = len(hex) / 2
j = 1
for i = 1 to ll
b[i] = fradix.Hex2Byte(mid(hex,j,2))
j += 2
next
return Blob(b)
end function
public function blob chararray2blob (character ch[]);byte b[]
long i,ll
ll = upperbound(ch)
for i = 1 to ll
b[i] = asc(ch[i])
next
return Blob(b)
end function
public function long blob2bytearray (blob blb, ref byte b[]);b = GetByteArray(blb)
return upperbound(b)
end function
public function long blob2chararray (blob blb, ref character ch[]);long i,ll
byte b[]
char c[]
b = GetByteArray(blb)
ll = upperbound(b)
for i = 1 to ll
c[i] = char(b[i])
next
ch = c
return ll
end function
public function long slice (blob blb, integer length, ref blob rblb[]);long i
long ll_loop
blob arr[]
ll_loop = ceiling(len(blb) / length)
for i = 1 to ll_loop
arr[i] = blobmid(blb,(i - 1) * length + 1 , length)
next
rblb = arr
return upperbound(rblb)
end function
public function blob fill (byte b, long length);byte lbyte[]
long i
for i = 1 to length
lbyte[i] = b
next
return blob(lbyte)
end function
on n_func_blob.create
call super::create
TriggerEvent( this, "constructor" )
end on
on n_func_blob.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on