How To Retrieve Individual Bytes from a Multi-Byte Type in VB

Article translations Article translations
Article ID: 171652 - View products that this article applies to.
This article was previously published under Q171652
Expand all | Collapse all

SUMMARY

This article demonstrates how to copy the individual bytes of data in a multi-byte data type, such as a long integer or a single-precision floating- point number, into a byte array. It also illustrates how to take an array of bytes and turn it into a specific data type that Visual Basic (and VBA) will recognize.

MORE INFORMATION

This code shows how to move the separate bytes of a long integer into a four-element byte array and also how to turn the byte array back into a long integer. In a Visual Basic project, place the following code in the declarations section:
   Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" ( _
           ByRef Destination As Any, _
           ByRef Source As Any, _
           ByVal numbytes As Long)
				
A long integer consists of four bytes. These four bytes are recognized by Visual Basic to be one number. Use the following subroutine to move the individual bytes into a byte array:
   Public Sub LongToBytes(ByRef TheArray() As Byte, ByRef TheLong As Long)

     Call CopyMemory(TheArray(LBound(TheArray)), TheLong, 4)

   End Sub
				
The first parameter passed to CopyMemory is the first element of the array into which the bytes will be stored. (NOTE: The entire array is passed to longToBytes.) The second parameter is the source variable. The third parameter is how many bytes will be moved. Because a long integer consists of four bytes, this parameter has been set to 4.

To go the other way, turning a byte array back into a long integer variable, use the following code:
    Public Function BytesToLong(TheArray() As Byte) As Long
   Dim TempLong As Long

     Call CopyMemory(TempLong, TheArray(LBound(TheArray)), 4)
     BytesToLong = TempLong

   End Function
				
NOTE: As with any API call, passing improper memory addresses can cause data corruption or could cause your program to terminate abnormally.

REFERENCES

For more information on the use of the RtlMoveMemory function in Visual Basic, please see the following article in the Microsoft Knowledge Base:
129947 Win32 Replacement for the hmemcpy Function

Properties

Article ID: 171652 - Last Review: February 12, 2007 - Revision: 4.5
APPLIES TO
  • Microsoft Visual Basic 5.0 Learning Edition, when used with:
    • the hardware: Intel x86
  • Microsoft Visual Basic 5.0 Professional Edition, when used with:
    • the hardware: Intel x86
  • Microsoft Visual Basic 5.0 Enterprise Edition, when used with:
    • the hardware: Intel x86
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Word 97 Standard Edition
Keywords: 
kb32bitonly kbhowto kbprogramming KB171652

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com