# How To Convert Hexadecimal Numbers to Long Integer

Article translations
Close
Expand all | Collapse all

## 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.

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

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

95431 FIX: Type Mismatch Error If Use VAL Function on Big Value

## Properties

Article ID: 161304 - Last Review: July 13, 2004 - Revision: 3.2
##### APPLIES TO
• Microsoft Visual Basic 6.0 Learning Edition
• Microsoft Visual Basic 6.0 Professional Edition
• Microsoft Visual Basic 6.0 Enterprise Edition
• Microsoft Visual Basic 5.0 Control Creation Edition
• Microsoft Visual Basic 5.0 Learning Edition
• Microsoft Visual Basic 5.0 Professional Edition
• Microsoft Visual Basic 5.0 Enterprise Edition
• Microsoft Visual Basic 4.0 Standard Edition
• Microsoft Visual Basic 4.0 Professional Edition
• Microsoft Visual Basic 4.0 Enterprise Edition
• Microsoft Visual Basic 2.0 Standard Edition
• Microsoft Visual Basic 3.0 Professional Edition
• Microsoft Visual Basic 2.0 Professional Edition
• Microsoft Visual Basic 3.0 Professional Edition
kbhowto KB161304