Showing posts with label VBScript. Show all posts
Showing posts with label VBScript. Show all posts

Thursday, October 2, 2008

VBScript Adding Large Hex Strings

This function is an example of how to add two large hex strings together keeping them as string values:
Function HexAdd(ByVal strNum1, ByVal strNum2)
size1 = Len(strNum1)
size2 = Len(strNum2)
If (size1 <> size2) Then
If (size1 > size2) Then
strNum2 = String(size1 - size2, "0") + strNum2
size2 = size1
Else
strNum1 = String(size2 - size1, "0") + strNum1
size1 = size2
End If
End If
' Begin adding
Dim i
Dim ret
Dim carry
Dim sum
ret = ""
i = CDbl(0)
carry = 0
For i = 1 To size1 '199999999999999999999998
a = "&H" & CStr(Mid(strNum1, size1 - i + 1, 1))
b = "&H" & CStr(Mid(strNum2, size1 - i + 1, 1))
sum = CInt(a) + CInt(b) + carry
ret = Hex(CStr(sum Mod 16)) & ret
carry = Fix(sum / 16)
Next
If (carry > 0) Then
ret = CStr(Hex(carry)) & ret
End If
HexAdd = ret
End Function

Call it like this:

ret = HexAdd("FFFFF", "123456789ABCDEF")

Wednesday, October 1, 2008

Handling Large Hex in VBScript

VBScript doesn't inherently support hex constants over 8 bits in length so I made a little function that attempts to handle large Hex strings and convert them to Decimals. It should be noted that Doubles lose precision in the E15 range of magnitude so beware using anything too large:
Function HexToDec(strHex)
Dim i
Dim size
Dim ret
size = Len(strHex) - 1
ret = CDbl(0)
For i = 0 To size
ret = ret + CDbl("&H" & Mid(strHex, size - i + 1, 1)) * (CDbl(16) ^ CDbl(i))
Next
HexToDec = ret
End Function
Function DecToHex(dblNumber)
Dim Q
Dim ret

ret = ""
Q = CDbl(Fix(dblNumber))
While Q > 0
ret = Hex(Q - Fix(Q / 16) * 16) & ret
Q = Fix(Q / CDbl(16))
Wend
DecToHex = ret
End Function

Called like this:

ret = HexToDec("0C0BA715B2223D47A8CAC87BE5D9679")
ret = DecToHex(CDBL(16843216856846468461654862))