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.

(0)

相关推荐

  • 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

  • QT中QDataStream二进制数据读写的实现

    Qt中的QDataStream类为我们的程序提供了读写二进制数据的能力.一个数据流如果是二进制编码的数据流,那么它肯定是与计算机的操作系统.CPU或者字节序无关的.例如,一个数据流是在一个运行Windows系统的PC机上被写入的,那么它照样可以在一台运行Solaris的Sun SPARC的机器上被读取出来.同样,我们也可以使用QDataStream去读写原生的未编码的二进制数据. QDataStream类实现了序列化C++的基本数据类型的功能,比如char,short,int,char* 等等.

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

    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

  • 使用node.js中的Buffer类处理二进制数据的方法

    前言 在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区.这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,下面话不多说,来看看详细的介绍. 创建Buffer对象 第一种:直接使用一个数组来初始化缓存区 var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf) 执行效果: 第二种:直接使用一个字符串来初始化缓存区 var str = 'hello' var buf = n

  • 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据

    导言: 在前面的教程我们阐述了应用程序处理二进制数据的2种模式,以及使用FileUpload 控件从浏览器向服务器文件系统上传文件.当文件上传并存储在文件系统里时,应在相应的数据库记录里存储该文件的存储路径. 我们先来看如何为最终用户提供二进制数据.怎样展示二进制数据呢?这取决于其类型.比如图片,我们将其显示为image:如果是PDFs,Microsoft Word文档.ZIP文件或其它类型的数据,或许提供一个"Download"链接比较妥当. 在本节,我们看如何在GridView和D

  • 详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    分析并操作 responseXML属性 如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析而来的 DOM 对象,这很难被操作和分析.这里有五种主要的分析 XML 文档的方式:  1.使用 XPath 定位到文档的制定部分.  2.使用 JXON 将其转换成 JavaScript 对象树.  3.手工的 解析和序列化 XML 为字符串或对象.  4.使用 XMLSerializer 把 DOM 树序列化成字符串

  • SQL Server中实现二进制与字符类型之间的数据转换

    在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容.解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据. 问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换? 一定会有人立马反问我:为什么不在程序中使用 C# 或者 JAVA 或者 C++ 来处理这个业务呢?我的回答是:这个我知道,也已经实现了.但在一些特殊的应用环境和业

  • 关于C#转换二进制所引起的一些思考

    前言 最近遇到很有意思转换二进制的问题,有部分童鞋俨然已了解,可能也有一部分童鞋没碰到过也就不知情,这里我们来深入学习下转换二进制所带来的问题. 二进制转换问题 假设现在我们有一个int类型的数据,它的范围区间暂且定在0-15之间,我们需要将其转换为二进制,然后获取二进制中的每一位,若不足4位则0填充.看似很简单是不是,直接通过C#内置APi即可达到此需求,如下: var binary = Convert.ToString(7, 2).PadLeft(4, '0').ToArray(); 上述将

  • C++实现string存取二进制数据的方法

    本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考.具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下. 在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的s

  • JavaScript读写二进制数据的方法详解

    前言 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数,如果想要在前端中处理音频和视频.那你必须要对二进制数据有很好地掌握和操作能力.下面话不多说了,来一起看看详细介绍的吧 类型化数组的出现 类型化数组是 HTML5 中引入的API,它能够让开发者使用 JavaScript 直接操作二进制数据.在类型化数组出现之前,我们是无法直接通过 JavaScript 操作二进制数据,通常都是操作 JavaScript 中的数据类型,由运行时转化成二进制.这就多了一个转化的过程,

随机推荐