欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在VBS中定义字节数组Byte()介绍

程序员文章站 2022-04-10 13:43:33
晚上在 qq 上看到昵称为“乱码”的好友回答了搜搜问问里一个问题: 在vbs中有办法定义字节数组么? 在vbs中有办法定义字节数组么?就是字节子类型数组(vartype是8...
晚上在 qq 上看到昵称为“乱码”的好友回答了搜搜问问里一个问题:


在vbs中有办法定义字节数组么?
在vbs中有办法定义字节数组么?就是字节子类型数组(vartype是8209的那种)注意不是vb!

但是回答实在是不堪入目,连别人问什么都没搞懂,而且那人居然还满意,真不知道他在想什么。

闲来没事,我来简单回答一下。首先要搞清楚别人在问什么,vbs 是弱类型脚本语言,只有一种数据类型,称为 variant,但是 variant 可以进一步分为几种子类型,这里不展开,详见《vbscript 数据类型》。所谓字节子类型数组(vartype是8209的那种),就是子类型为 byte 的数组(vbbyte + vbarray = 17 + 8192 = 8209)。

例如,msxml2.xmlhttp 对象的 responsebody 属性返回的就是字节数组:
复制代码 代码如下:

'author: demon
'website: http://demon.tw
'date: 2012/2/22
dim http, res
set http = createobject("msxml2.xmlhttp")
http.open "get", "http://demon.tw", false
http.send
res = http.responsebody
wscript.echo vartype(res), typename(res)

再例如,adodb.stream 对象的 read 方法返回的也是字节数组:
复制代码 代码如下:

'author: demon
'website: http://demon.tw
'date: 2012/2/22
dim ado, data
set ado = createobject("adodb.stream")
ado.type = 1
ado.open
ado.loadfromfile "demon.tw"
data = ado.read
wscript.echo vartype(data), typename(data)

那么如何在 vbs 中定义一个字节数组呢?有人说那还不简单,用 cbyte 函数强制转换一下不就行了?真的是这样么,写个简单的例子测试一下:
复制代码 代码如下:

'author: demon
'website: http://demon.tw
'date: 2012/2/22
dim a(9), i
for i = 0 to 9
a(i) = cbyte(i)
next
wscript.echo vartype(a), typename(a)

'输出 8204 variant()程序输出 8204 variant(),很可惜,这不是我们想要的。

那么正确的方法是什么呢?其实在《用vbs读写二进制文件的另一种方法》中出现过,使用 msxml2.domdocument 对象:
复制代码 代码如下:

'author: demon
'website: http://demon.tw
'date: 2012/2/22
dim xmldoc, node, bytes
set xmldoc = createobject("msxml2.domdocument")
set node = xmldoc.createelement("binary")
node.datatype = "bin.hex"
'demon.tw 的十六进制值为
'64 65 6d 6f 6e 2e 74 77
node.text = "64656d6f6e2e7477"
bytes = node.nodetypedvalue
wscript.echo vartype(bytes), typename(bytes)

这样 bytes 变量就是字节数组了,如果你知道其他的方法,欢迎不吝赐教。

原文: