快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号