You are currently offline, waiting for your internet to reconnect

How To Convert Hexadecimal Numbers to Long Integer

This article was previously published under Q161304
SUMMARY
Microsoft Visual Basic has a Hex$() function to convert a number into astring of Hexadecimal digits. However, it has no obvious function toperform the inverse conversion. This article details how to use the Val()function to perform the Hexadecimal to Long Integer conversion, plus atrap to avoid.
MORE INFORMATION
The Val() function can be used to convert a string of decimal digits into anumber. It can also be used on a string of hexadecimal digits, but you haveto 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 integervariable, you will probably only want numbers in the range 80000000 toFFFFFFFF to be treated as negative numbers. However, without taking specialprecautions, numbers in the range 8000 to FFFF will also be treated asnegative.

This occurs because numbers with four or fewer digits are convertedto signed 2-byte integers. When the signed integer intermediate value isconverted 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 smallnumbers are treated as Long. The following function performs theconversion 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 orearlier for hexadecimal numbers greater or equal to 80000000. Please seethe REFERENCES section of this article for more information.

Because this problem does not occur with numbers that fall in the IntegerTrap range, the alternate function given below adds error trapping to tryagain 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 MicrosoftKnowledge Base:
95431 FIX: Type Mismatch Error If Use VAL Function on Big Value
kbVBp500 kbVBp600 kbVBp kbdse kbDSupport kbVBp300 kbVBp400 kbVBp200
Properties

Article ID: 161304 - Last Review: 07/13/2004 19:10:00 - Revision: 3.2

  • 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
Feedback