Swap Endianness - SMcNeill - 03-22-2025
Inspired from the topic here: https://qb64phoenix.com/forum/showthread.php?tid=3547
Code: (Select All)
Dim As _Integer64 int64: int64 = &HDEADBEEFCAFEFEED
Print Hex$(int64)
Print Hex$(SwapEnd(int64, 8))
Print Hex$(SwapEnd(SwapEnd(int64, 8), 8))
Print
Dim As Long lng: lng = &HDEADBEEF
Print Hex$(lng)
Print Hex$(SwapEnd(lng, 4))
Print Hex$(SwapEnd(SwapEnd(lng, 4), 4))
Print
Dim As Integer intgr: intgr = &HDEAD
Print Hex$(intgr)
Print Hex$(SwapEnd(intgr, 2))
Print Hex$(SwapEnd(SwapEnd(intgr, 2), 2))
Print
Function SwapEnd~&& (num As _Unsigned _Integer64, biteSize As Integer)
Dim temp As _Unsigned _Integer64, temp1 As _Unsigned Long, temp2 As _Unsigned Integer
Select Case biteSize
Case 8 'integer64
temp = _ShL(num And &HFF&&, 56) 'byte #1
temp = temp Or _ShL(num And &HFF00&&, 40) '2
temp = temp Or _ShL(num And &HFF0000&&, 24) '3
temp = temp Or _ShL(num And &HFF000000&&, 8) '4
temp = temp Or _ShR(num And &HFF00000000&&, 8) '5
temp = temp Or _ShR(num And &HFF0000000000&&, 24) '6
temp = temp Or _ShR(num And &HFF000000000000&&, 40) '7
temp = temp Or _ShR(num And &HFF00000000000000&&, 56) '8
SwapEnd = temp
Case 4 'long
temp1 = _ShL(num And &HFF~&, 24)
temp1 = temp1 Or _ShL(num And &HFF00~&, 8)
temp1 = temp1 Or _ShR(num And &HFF0000~&, 8)
temp1 = temp1 Or _ShR(num And &HFF000000~&, 24)
SwapEnd = temp1
Case 2 'integer
temp2 = temp2 Or _ShL(num And &HFF~%, 8) '1
temp2 = temp2 Or _ShR(num And &HFF00~%, 8) '2
SwapEnd = temp2
End Select
End Function
One command to swap endianness for int64, long, and integer type variables. Supply the value and the bite size.
|