VBS中转换二进制数据为字符串常用办法
VBS中转换二进制数据为字符串常用办法
发布时间:2016-12-28 来源:查字典编辑
摘要:至少有三种以上办法,可以把二进制数据(比如您从ASP的Request.BinaryRead方法得到的数据)转换为字符串。第一种:使用VBS的...

至少有三种以上办法,可以把二进制数据(比如您从ASP的Request.BinaryRead方法得到的数据)转换为字符串。

第一种:使用VBS的MultiByte方法

实例:

FunctionSimpleBinaryToString(Binary)

'SimpleBinaryToStringconvertsbinarydata(VT_UI1|VT_ARRAYOrMultiBytestring)

'toastring(BSTR)usingMultiByteVBSfunctions

DimI,S

ForI=1ToLenB(Binary)

S=S&Chr(AscB(MidB(Binary,I,1)))

Next

SimpleBinaryToString=S

EndFunction

这个方法非常简单明了,但是处理大数据流时,比较慢。

建议只用来处理100KB以下的数据。

下面的这个类似的方法,性能稍微好些:

FunctionBinaryToString(Binary)

'AntoninFoller,http://www.pstruh.cz

'OptimizedversionofasimpleBinaryToStringalgorithm.

Dimcl1,cl2,cl3,pl1,pl2,pl3

DimL

cl1=1

cl2=1

cl3=1

L=LenB(Binary)

DoWhilecl1<=L

pl3=pl3&Chr(AscB(MidB(Binary,cl1,1)))

cl1=cl1+1

cl3=cl3+1

Ifcl3>300Then

pl2=pl2&pl3

pl3=""

cl3=1

cl2=cl2+1

Ifcl2>200Then

pl1=pl1&pl2

pl2=""

cl2=1

EndIf

EndIf

Loop

BinaryToString=pl1&pl2&pl3

EndFunction

BinaryToString方法比SimpleBinaryToString方法性能高20倍。建议用来处理2MB以下的数据。

第二种方法:使用ADODB.Recordset

ADODB.Recordset可以让你支持几乎所有VARIANT支持的数据类型,你可以用它在string和

binary之间转换。

FunctionRSBinaryToString(xBinary)

'AntoninFoller,http://www.pstruh.cz

'RSBinaryToStringconvertsbinarydata(VT_UI1|VT_ARRAYOrMultiBytestring)

'toastring(BSTR)usingADOrecordset

DimBinary

'MultiBytedatamustbeconvertedToVT_UI1|VT_ARRAYfirst.

Ifvartype(xBinary)=8ThenBinary=MultiByteToBinary(xBinary)ElseBinary=xBinary

DimRS,LBinary

ConstadLongVarChar=201

SetRS=CreateObject("ADODB.Recordset")

LBinary=LenB(Binary)

IfLBinary>0Then

RS.Fields.Append"mBinary",adLongVarChar,LBinary

RS.Open

RS.AddNew

RS("mBinary").AppendChunkBinary

RS.Update

RSBinaryToString=RS("mBinary")

Else

RSBinaryToString=""

EndIf

EndFunction

RSBinaryToString没有什么限制--除了物理内存之外。这种处理方式是MultiByte方式的100倍!你可以用它来处理高达100MB的数据!这种转换方式,你也可以用来把MultiBytestrings转换为String。下面这个方法把MultiBytestrings转换为Binary:FunctionMultiByteToBinary(MultiByte)

'©2000AntoninFoller,http://www.pstruh.cz

'MultiByteToBinaryconvertsmultibytestringTorealbinarydata(VT_UI1|VT_ARRAY)

'Usingrecordset

DimRS,LMultiByte,Binary

ConstadLongVarBinary=205

SetRS=CreateObject("ADODB.Recordset")

LMultiByte=LenB(MultiByte)

IfLMultiByte>0Then

RS.Fields.Append"mBinary",adLongVarBinary,LMultiByte

RS.Open

RS.AddNew

RS("mBinary").AppendChunkMultiByte&ChrB(0)

RS.Update

Binary=RS("mBinary").GetChunk(LMultiByte)

EndIf

MultiByteToBinary=Binary

EndFunction

第三种:使用ADODB.Stream这种方式是比较常用的:'Stream_BinaryToStringFunction

'2003AntoninFoller,http://www.pstruh.cz

'Binary-VT_UI1|VT_ARRAYdataToconvertToastring

'CharSet-charsetofthesourcebinarydata-defaultis"us-ascii"

FunctionStream_BinaryToString(Binary,CharSet)

ConstadTypeText=2

ConstadTypeBinary=1

'CreateStreamobject

DimBinaryStream'AsNewStream

SetBinaryStream=CreateObject("ADODB.Stream")

'Specifystreamtype-wewantTosavetext/stringdata.

BinaryStream.Type=adTypeBinary

'OpenthestreamAndwritetext/stringdataTotheobject

BinaryStream.Open

BinaryStream.WriteBinary

'ChangestreamtypeTobinary

BinaryStream.Position=0

BinaryStream.Type=adTypeText

'SpecifycharsetForthesourcetext(unicode)data.

IfLen(CharSet)>0Then

BinaryStream.CharSet=CharSet

Else

BinaryStream.CharSet="us-ascii"

EndIf

'OpenthestreamAndgetbinarydatafromtheobject

Stream_BinaryToString=BinaryStream.ReadText

EndFunction

要存储、获取二进制数据,从一个本地文件、上传的二进制数据文件或者ASP中,可以参考:PureandHugeASPfileuploadwithprogress.。Tipkeywords:Binary,Byte,Array,VT_UI1,VT_ARRAY,BinaryWrite,BinaryRead,ChrB,InstrB,LeftB,MidB,RightB,ASP,VBSCOPYRIGHTANDPERMITTEDUSEOFhttp://www.pstruh.cz/tipsWEBSITE.TheentirecontentsofPSTRUHSoftwarewebsiteconsistofcopyrightmaterialownedbyAntoninFoller,PSTRUHSoftware.

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新vbs学习
热门vbs学习
脚本专栏子分类