How To Convert Hexadecimal Numbers to Long Integer (161304)
The information in this article applies to:
- Microsoft Visual Basic Learning Edition for Windows 6.0
- Microsoft Visual Basic Professional Edition for Windows 6.0
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
- Microsoft Visual Basic Control Creation Edition for Windows 5.0
- Microsoft Visual Basic Learning Edition for Windows 5.0
- Microsoft Visual Basic Professional Edition for Windows 5.0
- Microsoft Visual Basic Enterprise Edition for Windows 5.0
- Microsoft Visual Basic Standard Edition for Windows 4.0
- Microsoft Visual Basic Professional Edition for Windows 4.0
- Microsoft Visual Basic Enterprise Edition for Windows 4.0
- Microsoft Visual Basic Standard Edition for Windows 2.0
- Microsoft Visual Basic Standard Edition for Windows 3.0
- Microsoft Visual Basic Professional Edition for Windows 2.0
- Microsoft Visual Basic Professional Edition for Windows 3.0
This article was previously published under Q161304 SUMMARY
Microsoft Visual Basic has a Hex$() function to convert a number into a
string of Hexadecimal digits. However, it has no obvious function to
perform the inverse conversion. This article details how to use the Val()
function to perform the Hexadecimal to Long Integer conversion, plus a
trap to avoid.
MORE INFORMATION
The Val() function can be used to convert a string of decimal digits into a
number. It can also be used on a string of hexadecimal digits, but you have
to append the characters "&H" to the string of digits so that the Val()
function will use the correct number base in the conversion process.
For example:
A = Val("1234") ' performs decimal conversion
A = Val("7FFF") ' results in 7 - the F's are ignored
A = Val("&H7FFF") ' performs hexadecimal conversion
Integer Trap
If you are assigning the results of the conversion to a Long integer
variable, you will probably only want numbers in the range 80000000 to
FFFFFFFF to be treated as negative numbers. However, without taking special
precautions, numbers in the range 8000 to FFFF will also be treated as
negative.
This occurs because numbers with four or fewer digits are converted
to signed 2-byte integers. When the signed integer intermediate value is
converted to a Long (or 4-byte) integer, the sign is propagated.
Visual Basic 4.0/Access 95 and Later
By appending the "&" Long suffix to the hexadecimal string, even small
numbers are treated as Long. The following function performs the
conversion correctly:
Function HexToLong(ByVal sHex As String) As Long
HexToLong = Val("&H" & sHex & "&")
End Function
Visual Basic 3.0/Access 2.0 and Earlier
The method illustrated above will not work in Microsoft Visual Basic 3.0 or
earlier for hexadecimal numbers greater or equal to 80000000. Please see
the REFERENCES section of this article for more information.
Because this problem does not occur with numbers that fall in the Integer
Trap range, the alternate function given below adds error trapping to try
again without the appended "&" Long suffix:
Function HexToLong(ByVal sHex As String) As Long
On Error Resume Next
HexToLong = Val("&H" & sHex & "&")
If Err Then
On Error Goto 0
HexToLong = Val("&H" & sHex)
End If
End Function
Usage of either version of the function is as follows:
A = HexToLong("8000")
REFERENCES
Microsoft Visual Basic Help topic: Val Function
Microsoft Visual Basic 4.0 ReadMe topic: Coercion of Hexadecimal Values
For more information, please see the following article in the Microsoft
Knowledge Base:
95431 FIX: Type Mismatch Error If Use VAL Function on Big Value
Modification Type: | Minor | Last Reviewed: | 7/13/2004 |
---|
Keywords: | kbhowto KB161304 |
---|
|