晚上在 qq 上看到暱稱為「亂碼」的好友回答了搜搜問問裡乙個問題:
在vbs中有辦法定義位元組陣列麼?
在vbs中有辦法定義位元組陣列麼?就是位元組子型別陣列(vartype是8209的那種)注意不是vb!
但是回答實在是不堪入目,連別人問什麼都沒搞懂,而且那人居然還滿意,真不知道他在想什麼。
閒來沒事,我來簡單回答一下。首先要搞清楚別人在問什麼,vbs 是弱型別指令碼語言,只有一種資料型別,稱為 variant,但是 variant 可以進一步分為幾種子型別,這裡不展開,詳見《vbscript 資料型別》。所謂位元組子型別陣列(vartype是8209的那種),就是子型別為 byte 的陣列(vbbyte + vbarray = 17 + 8192 = 8209)。
例如,msxml2.xmlhttp 物件的 responsebody 屬性返回的就是位元組陣列:
複製** **如下:
set http = createobje程式設計客棧ct("msxml2.xmlhttp")
再例如,adodb.stream 物件的 read 方程式設計客棧法返回的也是位元組陣列:
複製** **如下:
'author: demon
'website:
'date: 2012/2/22
dim ado, data
set ado = createobject("adodb.stream")
ado.type = 1
ado.open
ado.loadfromfile "demon.tw"
data = awww.cppcns.comdo.read
wscript.echo vartype(data), typename(data)
那麼如何在 vbs 中定義乙個位元組陣列呢?有人說那還不簡單,用 cbyte 函式強制轉換一下不就行了?真的是這樣麼,寫個簡單的例子測試一下:
複製** **如下:
'author: demon
'website:
'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:
'date: 2012/2/22
dim xmldoc, node, bytes www.cppcns.com
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 變數就是位元組陣列了,如果你知道其他的方法,歡迎不吝賜教。
原文:/programming/vbs-byte-array.html
本文標題: 在vbs中定義位元組陣列byte()介紹
本文位址:
位元組陣列 Byte
位元組 byte 發音 bait 位元組是通過網路傳輸資訊 或在硬碟或記憶體中儲存資訊 的單位。在ascii碼中,乙個英文本母 不分大小寫 佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。符號 英文標點佔乙個位元組,中文標點佔兩個位元組。舉例 英文句號 佔1個位元組的大小,中文句號 佔2個位元組...
byte陣列轉blob型別 位元組陣列流詳解
bytearrayinputstream和bytearrayoutputstream經常用在需要流和陣列之間轉化的情況 說白了,fileinputstream是把檔案當做資料來源。bytearrayinputstream則是把記憶體中的 某個位元組陣列物件 當做資料來源。位元組陣列流只有位元組流,沒...
unity AssetBundle位元組陣列加密
1.加密 對assetbundle的位元組陣列每位進行與key的異或處理 相同為0,不同為1 using system using system.collections.generic using system.io using system.linq using system.text names...