Convertion between binary and string data.
You can use simple PureVBS functions to convert between string (unicode, native VBS type) and multibyte string data types:
'Converts binary data or multibyte string to a unicode string
Function BinaryToStringSimple(Binary)
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
BinaryToStringSimple = S
End Function
'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
'Converts array of numbers to a multibyte string
Function ArrayToMB(A)
Dim I, MB
For I = LBound(A) To UBound(A)
MB = MB & ChrB(A(I))
Next
ArrayToMB = MB
End Function
Store binary registry value
The shortest way (and pure VBS) is to use String-to-Multibyte conversion function and Setvalue method with vtBinary data type:
Sub SetBinaryValue()
Dim S, MyKey
'Get RegEdit.Server object
Set S = CreateObject("RegEdit.Server")
'Add a new key
Set MyKey = S.GetKey("HKEY_LOCAL_MACHINE\SOFTWARE").CreateKey("MyFirstKey")
'Set binary value - zero terminated binary string
MyKey.Values("BinaryData").SetValue StringToMB("Some binary data") & ChrB(0), vtBinary
End Sub
You can set any binary value using ArrayToMB conversion function:
MyKey.Values("BinaryData").SetValue ArrayToMB(Array(7, 56, 255, 54, 78, 94, 0, 44)), vtBinary
Read binary registry value
We can read binary value and store it to a variable in VBS as in VBA. The only way to work with such value in VBS are multibyte string functions - LeftB, MidB, InstrB, ChrB, LenB. You can use some external object to handle binary data - ADODB.Stream, ADODB.Recordset or our
ScriptUtils.ByteArray.
BinaryToStringSimple uses this function to convert binary data to a string :
Sub ReadBinaryValue()
Dim S, MyKey
'Get RegEdit.Server object
Set S = CreateObject("RegEdit.Server")
'Add a new key
Set MyKey = S.GetKey("HKEY_LOCAL_MACHINE\SOFTWARE\MyFirstKey")
'Restore binary value
Dim Value: Value = MyKey.Values("BinaryData").Value
'Value variable contains VT_UI1 | VT_ARRAY - binary data.
Wscript.Echo BinaryToStringSimple(Value)
End Sub
You can get any of the source byte from binary data using these functions
'Get first byte
FirstByte = AscB(MidB(Value, 1, 1))
'Get byte no. 7
Byte7 = AscB(MidB(Value, 7, 1))
'Get all bytes
Dim I: For I = 1 To LenB(Value)
Wscript.Echo AscB(MidB(Value, I, 1))
Next