Explaination
Using and accessing bytes within word and long numbers etc may be required when you are creating your solution. This can be done with some ease.
Example 1:
You can access the bytes within word and longs variables using the following as a guide using the Suffixes _H
, _U
and _E
Dim workvariable as word workvariable = 21845 Dim lowb as byte Dim highb as byte Dim upperb as byte Dim lastb as byte lowb = workvariable highb = workvariable_H upperb = workvariable_U lastb = workvariable_E
To further explain, where
Dim rB as Byte Dim sW as Word
To extract the bytes from a WORD of 16 bits use the Suffix _H
'To use the bits 7-0 [lower byte] in the Word variable sW rB = sW 'For bits 15-8 [upper byte] in the Word variable sW, use sw_H rB = sW_H
To extract the bytes from a LONG of 32 bits use the Suffixes _H
, _U
and
_E
, where
Dim rB as Byte Dim tL as Long ‘ For bits 7-0 [lowest byte #0] in Long variable tL rB = tL ‘ For bits 15-8 [lower middle byte #1] in Long variable tL rB = tL_H ‘ For bits 23-16 [upper middle byte #2] in Long variable tL rB = tL_U ‘ For bits 31-24 [highest byte #3] in Long variable tL rB = tL_E
To extract nibbles from the variable rB
lower_nibble = rB & 0x0F upper_nibble = (rB & 0xF0) / 16
Example 2:
Assigning values to Word and Long variables via the the Byte variable (the Least Significant Byte [.lsb]) of the same Word and Long variable.
Because a Long (or Word) variable and the Least Significant Byte, of the variable, have the same variable assignments to specific byte elements (_e, _u and _h) assignment must be appropriate to the element.
The code below uses a Long variable but the same principle is used for a Word.
Assigning two values, a byte and a word constant value, to the variable tL to compare resulting impact on Long variable.
Dim tL as Long tL = 255 'All bits of the value 255 will reside in the lowest byte of the Long variable tL tL = 286 'This assignment will flow into tL_H where tL_H =1 and tl=30.
Assigning values to specific elements of a Long variable.
'Assign value to specific elements tL_E = 0xF7 tL_U = 0xC5 tL_H = 0xE3 'is same as the following assignment, we show the use of casting for clarification only. [Long] tL = 0xF7C5E300 The lower byte (tL) is empty (zero). 'or, treat the Long as a byte and assign a byte. [byte]tL = [byte]0xA4
Assigning values to the byte element of a long variable.
'This will assign the lowest byte with 0xA4 but this assignment will also clear the upper 3 byte elements of the long variable. tL = 0xA4 'To assign the lowest byte tL = ( tL and 0xffffff00 ) + 0xA4 'Wwill preserve the upper bytes and ensure the lowest byte is assigned correctly.
A method to check a variable is assigned as expected is to use HserPrint and HserPrint hex(), as follows:
' HserPrint hex() only prints one byte so we need to handle the four elements HserPrint " Print tL _E, tL_U, tL_H & tL as hex" HserPrint hex (tL_E) HserPrint hex (tL_U) HserPrint hex (tL_H) HserPrint hex (tL) HserPrintCRLF HserPrint "Variable tL = " HserPrint tL
The user code above will result in an output as follows:
Print tL _E, tL_U, tL_H & tL as hexF7C5E3A4 Variable tL = 4156941220