使用VbScript将Hex转换为String

Ins*_*Man 2 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
Run Code Online (Sandbox Code Playgroud)

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

Ekk*_*ner 5

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

>> WScript.Echo Chr("&H" & "41")
>>
A
>>
Run Code Online (Sandbox Code Playgroud)

原则上展示了这一战略.演示代码:

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))
Run Code Online (Sandbox Code Playgroud)

输出:

0 test
1 74 65 73 74
2 test
Run Code Online (Sandbox Code Playgroud)

更新wrt comment/unicode:

使用AscW/ChrW(VB 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))
Run Code Online (Sandbox Code Playgroud)