使用VbScript将Hex转换为String

时间:2014-06-21 14:36:13

标签: vbscript

这是一个将字符串转换为十六进制代码的脚本:

strString = "test"
strHex =""
For i=1 To Len(strString)
    strHex = strHex & " "  & Hex(Asc(Mid(strString,i,1)))
Next

strHex = Right(strHex,Len(strHex)-1)

WScript.Echo strHex

我想做一个将十六进制转换为字符串的反向操作,这是否可以使用vbscript?

1 个答案:

答案 0 :(得分:5)

VBScript使用"& H"将数字标记为十六进制。所以

>> WScript.Echo Chr("&H" & "41")
>>
A
>>

原则上证明了这一策略。演示代码:

Option Explicit

Function s2a(s)
  ReDim a(Len(s) - 1)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Mid(s, i + 1, 1)
  Next
  s2a = a
End Function

Function s2h(s)
  Dim a : a = s2a(s)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Right(00 & Hex(Asc(a(i))), 2)
  Next
  s2h = Join(a)
End Function

Function h2s(h)
  Dim a : a = Split(h)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Chr("&H" & a(i))
  Next
  h2s = Join(a, "")
End Function

Dim s : s = "test"
WScript.Echo 0, s
WScript.Echo 1, s2h(s)
WScript.Echo 2, h2s(s2h(s))

输出:

0 test
1 74 65 73 74
2 test

更新评论/ unicode:

使用AscW / ChrWVB ref)来处理UTF 16.

Option Explicit

Function s2a(s)
  ReDim a(Len(s) - 1)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Mid(s, i + 1, 1)
  Next
  s2a = a
End Function

Function s2h(s)
  Dim a : a = s2a(s)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Right("0000" & Hex(AscW(a(i))), 4)
  Next
  s2h = Join(a)
End Function

Function h2s(h)
  Dim a : a = Split(h)
  Dim i
  For i = 0 To UBound(a)
      a(i) = ChrW("&H" & a(i))
  Next
  h2s = Join(a, "")
End Function

Dim s : s = "abcä" & ChrW("&H" & "d98a")
WScript.Echo 0, s
WScript.Echo 1, s2h(s)
WScript.Echo 2, h2s(s2h(s))