VBS中转换二进制数据为字符串常用办法
作者 佚名
来源 ASP编程
浏览
发布时间 2013-07-09
至少有三种以上办法,可以把二进制数据(比如您从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 ''OpenthestreamAndwritete |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于VBS中转换二进制数据为字符串常用办法的所有评论