代码之家  ›  专栏  ›  技术社区  ›  Andrew Florko

vbscript:将unicode字符串转换为字节数组

  •  1
  • Andrew Florko  · 技术社区  · 15 年前

    我已将unicode字符串传递给vbscript过程(不是VisualBasic6,而是vbscript)。我想逐字符迭代unicode字符串,获取每个符号的代码,将代码截断为字节范围[0..255],并创建字节数组。

    这样,新的字节数组在内存中应该比原来的unicode字符串小两倍。我将通过 ADODB.Stream

    如何将unicode字符串转换为字节数组,并将符号代码截断为字节范围?

    提前谢谢!

    3 回复  |  直到 15 年前
        1
  •  4
  •   Alexander Rafferty    15 年前

    首先,只有当字符串只包含ascii字符时,将unicode转换为ascii才有效。因为unicode包含ascii,所以只需删除每一个字符。

    编辑:在unicode中,每个ascii字符都以一个空(0)字节开头。删除此字节以将字符串转换为ASCII。

        2
  •  2
  •   Andrew Florko    15 年前

    任务是通过字符串类型将二进制流从服务器发送到vbs脚本。我通过在服务器上创建包含base64编码的字节数组作为字符串数据的CDATA部分的Xml文档找到了解决方案。

    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
    
        3
  •  1
  •   Hermolaou    8 年前

    此函数用于创建字节数组:

    ' 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