我将unicode字符串传递给vbscript程序(不是visual basic 6,而是vbscript)。我想通过char迭代unicode字符串char,获取每个符号的代码,将代码截断为字节范围[0..255]并创建字节数组。
这样,与原始unicode字符串相比,新的字节数组在内存中应该小两倍。我将通过ADODB.Stream对象进一步保存此数组文件
如何将unicode字符串转换为字节数组,并将符号代码截断为字节范围?
提前谢谢!
答案 0 :(得分:4)
首先,将unicode转换为ascii只有在字符串只包含ascii字符时才有效。由于unicode包含ascii,因此只需删除每个第二个字符。
在互联网上查找unicode以获取详细信息。
编辑:在unicode中,每个ascii字符都以NULL(0)字节进行。删除此字节可将字符串转换为ASCII。
答案 1 :(得分:2)
似乎没有办法在vbs中创建字节数组(虽然它在visual basic中非常简单) - 所有数组都是变体数组。
任务是通过字符串类型将二进制流从服务器发送到vbs脚本。我通过在CDATA部分的服务器上创建Xml Document来找到解决方案,该部分包含base64编码的字节数组作为字符串数据。
客户端(vbs)执行以下操作:
set xmlDoc = CreateObject("Microsoft.XmlDom")
xmlDoc.loadXML(dataFromServer)
base64str = xmlDoc.DocumentElement.Text ' it's base64 coded binary stream
arrayOfBytes = decodeBase64(base64str)
Function decodeBase64(base64)
set dm = CreateObject("Microsoft.XMLDOM")
set el = dm.createElement("tmp")
el.DataType = "bin.base64"
el.Text = base64
decodeBase64 = el.NodeTypedValue
set dm = Nothing
End Function
答案 2 :(得分:1)
此函数创建一个字节数组:
' http://www.motobit.com/tips/detpg_binarytostring/
Function MultiByteToBinary(MultiByte)
'� 2000 Antonin Foller, http://www.motobit.com
' 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
此函数创建一个多字节字符串。
' http://www.motobit.com/help/regedit/pa26.htm
'Converts unicode string to a multibyte string
Function StringToMB(S)
Dim I, B
For I = 1 To Len(S)
B = B & ChrB(Asc(Mid(S, I, 1)))
Next
StringToMB = B
End Function