欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

VBS中转换二进制数据为字符串常用办法

程序员文章站 2022-03-06 23:50:58
至少有三种以上办法,可以把二进制数据(比如您从asp的request.binaryread方法得到的数据)转换为字符串。  第一种:使用vbs的multibyte...
至少有三种以上办法,可以把二进制数据(比如您从asp的request.binaryread方法得到的数据)转换为字符串。 

第一种:使用vbs的multibyte 方法 

实例: 

function simplebinarytostring(binary) 
'simplebinarytostring converts binary data (vt_ui1 | vt_array or multibyte string) 
'to a string (bstr) using multibyte vbs functions 
dim i, s 
for i = 1 to lenb(binary) 
s = s & chr(ascb(midb(binary, i, 1))) 
next 
simplebinarytostring = s 
end function 

这个方法非常简单明了,但是处理大数据流时,比较慢。 
建议只用来处理100kb以下的数据。 
下面的这个类似的方法,性能稍微好些: 
function binarytostring(binary) 
'antonin foller, http://www.pstruh.cz 
'optimized version of a simple binarytostring algorithm. 

dim cl1, cl2, cl3, pl1, pl2, pl3 
dim l 
cl1 = 1 
cl2 = 1 
cl3 = 1 
l = lenb(binary) 

do while cl1<=l 
pl3 = pl3 & chr(ascb(midb(binary,cl1,1))) 
cl1 = cl1 + 1 
cl3 = cl3 + 1 
if cl3>300 then 
pl2 = pl2 & pl3 
pl3 = "" 
cl3 = 1 
cl2 = cl2 + 1 
if cl2>200 then 
pl1 = pl1 & pl2 
pl2 = "" 
cl2 = 1 
end if 
end if 
loop 
binarytostring = pl1 & pl2 & pl3 
end function 
binarytostring方法比simplebinarytostring方法性能高20倍。建议用来处理2mb以下的数据。 
第二种方法:使用adodb.recordset 
adodb.recordset 可以让你支持几乎所有variant支持的数据类型,你可以用它在string和 
binary之间转换。 
function rsbinarytostring(xbinary) 
'antonin foller, http://www.pstruh.cz 
'rsbinarytostring converts binary data (vt_ui1 | vt_array or multibyte string) 
'to a string (bstr) using ado recordset 

dim binary 
'multibyte data must be converted to vt_ui1 | vt_array first. 
if vartype(xbinary)=8 then binary = multibytetobinary(xbinary) else binary = xbinary 

dim rs, lbinary 
const adlongvarchar = 201 
set rs = createobject("adodb.recordset") 
lbinary = lenb(binary) 

if lbinary>0 then 
rs.fields.append "mbinary", adlongvarchar, lbinary 
rs.open 
rs.addnew 
rs("mbinary").appendchunk binary 
rs.update 
rsbinarytostring = rs("mbinary") 
else 
rsbinarytostring = "" 
end if 
end function 
rsbinarytostring 没有什么限制--除了物理内存之外。这种处理方式是multibyte方式的100倍!你可以用它来处理高达100mb的数据! 这种转换方式,你也可以用来把multibyte strings转换为string。下面这个方法把multibyte strings转换为binary:function multibytetobinary(multibyte) 
'© 2000 antonin foller, http://www.pstruh.cz 
' multibytetobinary converts multibyte string to real binary data (vt_ui1 | vt_array) 
' using recordset 
dim rs, lmultibyte, binary 
const adlongvarbinary = 205 
set rs = createobject("adodb.recordset") 
lmultibyte = lenb(multibyte) 
if lmultibyte>0 then 
rs.fields.append "mbinary", adlongvarbinary, lmultibyte 
rs.open 
rs.addnew 
rs("mbinary").appendchunk multibyte & chrb(0) 
rs.update 
binary = rs("mbinary").getchunk(lmultibyte) 
end if 
multibytetobinary = binary 
end function 
第三种:使用adodb.stream这种方式是比较常用的:'stream_binarytostring function 
'2003 antonin foller, http://www.pstruh.cz 
'binary - vt_ui1 | vt_array data to convert to a string 
'charset - charset of the source binary data - default is "us-ascii" 
function stream_binarytostring(binary, charset) 
const adtypetext = 2 
const adtypebinary = 1 

'create stream object 
dim binarystream 'as new stream 
set binarystream = createobject("adodb.stream") 

'specify stream type - we want to save text/string data. 
binarystream.type = adtypebinary 

'open the stream and write text/string data to the object 
binarystream.open 
binarystream.write binary 


'change stream type to binary 
binarystream.position = 0 
binarystream.type = adtypetext 

'specify charset for the source text (unicode) data. 
if len(charset) > 0 then 
binarystream.charset = charset 
else 
binarystream.charset = "us-ascii" 
end if 

'open the stream and get binary data from the object 
stream_binarytostring = binarystream.readtext 
end function 
要存储、获取二进制数据,从一个本地文件、上传的二进制数据文件或者asp中,可以参考:pure and huge asp file upload with progress.。 tip keywords: binary, byte, array, vt_ui1, vt_array, binarywrite, binaryread, chrb, instrb, leftb, midb, rightb, asp, vbscopyright and permitted use of http://www.pstruh.cz/tips website. the entire contents of pstruh software website consist of copyright material owned by antonin foller, pstruh software.