Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Swap Endianness
#1
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.
Reply


Messages In This Thread
Swap Endianness - by SMcNeill - 03-22-2025, 04:46 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)