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

至少有三种以上办法,可以把二进制数据(比如您从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. 

时间: 2024-09-09 19:15:16

VBS中转换二进制数据为字符串常用办法_vbs的相关文章

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

二进制|数据|转换|字符串 至少有三种以上办法,可以把二进制数据(比如您从ASP的Request.BinaryRead方法得到的数据)转换为字符串. 第一种:使用VBS的MultiByte 方法 实例: Function SimpleBinaryToString(Binary) 'SimpleBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string) 'to a string (BSTR) using M

java-求助:JAVA二进制数据与字符串转换问题

问题描述 求助:JAVA二进制数据与字符串转换问题 从文件中按照GBK编码方式读取二进制流,将二进制数据封装到XML数据包中,经过 网络传输到另一端后,再将二进制数据按照GBK编码写回到某一文件中,二进制数据 能够获取到,但是经过字符串处理后,到另一端如何还原回去?大神,求破! 解决方案 你所谓的按照GBK编码方式读取,关键问题在于你的文件本身是不是按照GBK来写的?如果本身就是GBK的文件,你读取后封装为XML,传输到另一端后,直接写入文件就可以了,不需要还原. 但是如果你原来的文件不是GBK

Go语言中转换JSON数据简单例子_Golang

Go语言转换JSON数据真是非常的简单. 以EasyUI的Demo为例,将/demo/datagrid/datagrid_data1.json 拷贝到$GOPATH/src目录: JSON.go: 复制代码 代码如下: package main import (         "encoding/json"         "fmt"         "io/ioutil" ) type product struct {         Pro

VBS中CreateObject和WScript.CreateObject的区别介绍_vbs

CreateObject和WScript.CreateObject的区别一: CreateObject是VBS的内置函数,属于语言的一部分:而WScript.CreateObject是Windows脚本宿主(wscript.exe和cscript.exe)提供的WScript对象的方法.类似于批处理中内部命令和外部命令的关系.在VBS中,CreateObject总是可用的,而WScript.CreateObject只有在宿主为wscript.exe和cscript.exe的情况下才可以使用,在W

VBS中InputBox函数的返回值使用技巧_vbs

如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中的内容.如果用户单击取消,则函数返回一个零长度字符串 (""). 这是参考手册对InputBox函数返回值的说明,简单而明了,还有必要专门写一篇文章来讨论?我知道你一定对标题不屑一顾,换成是我,我也一定会不屑一顾,如果我没有看到百度VBS吧里的一个帖子. 关于Inputbox 疑惑 ---------------------------- 如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中

Windows中恢复丢失数据的一些小办法

1:误将一个系统文件删除了,导致计算机运行的不正常, 如果文件被删到回收站,可以通过回收站的还原功能来恢复:打开"回收站",并选中被删的文件:然后单击"回收站任务"栏中的"还原此项目"即可.如果回收站中找不到被删的文件,也可以通过"系统还原"来恢复,操作如下:鼠标依次单击"开始→程序→附件→系统工具→系统还原",打开"系统还原"向导:在向导界面中选择"恢复我的计算机到一个较早的

用Excel做数据排序地常用办法与灵活技术

在用Excel制作相关的数据表格时,我们可以利用其强大的排序功能,浏览.查询.统计相关的数字.下面,我们以图1所示的"员工基本情况登记表"为例,来全面体验一番Excel的排序功能. 列表能否灵活排序"> 一.快速排序 如果我们希望对员工资料按某列属性(如"工龄"由长到短)进行排列,可以这样操作:选中"工龄"列任意一个单元格(如I3),然后按一下"常用"工具栏上的"降序排序"按钮即可(参见图1

Windows 8/8.1系统中驱动安装“数据无效”错误解决办法

解决方案: 1. 我们在键中直接按下Winkey+R 然后在打开窗口我们 填写"services.msc" 然后回车进入之后我们点击 "计算机管理" 在这里找到 "服务" 进入如下图所示. 2. 在打开列表中我们找到"Device Install Service"和"Device Setup Manager"两个服务项,如果没启动我们就来"启动"此服务. 亦或在"以管理员身份运

vbs中获取脚本当前路径的2个方法_vbs

方法一: 复制代码 代码如下: currentpath = createobject("Scripting.FileSystemObject").GetFolder(".").Path 方法二: 复制代码 代码如下: currentpath = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path