This module contains helpers that deal with different byte orders (endian).
Endianness is the order of bytes of a value in memory. Big-endian means that the most significant byte is stored at the smallest memory address, while little endian means that the least-significant byte is stored at the smallest address. See also https://en.wikipedia.org/wiki/Endianness.
Unstable API.
proc swapEndian16(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
tags: [], forbids: [].}inp to outp, reversing the byte order. Both buffers are supposed to contain at least 2 bytes. Example:
var a = [1'u8, 2] var b: array[2, uint8] swapEndian16(addr b, addr a) assert b == [2'u8, 1]Source Edit
proc swapEndian32(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
tags: [], forbids: [].}inp to outp, reversing the byte order. Both buffers are supposed to contain at least 4 bytes. Example:
var a = [1'u8, 2, 3, 4] var b: array[4, uint8] swapEndian32(addr b, addr a) assert b == [4'u8, 3, 2, 1]Source Edit
proc swapEndian64(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
tags: [], forbids: [].}inp to outp, reversing the byte order. Both buffers are supposed to contain at least 8 bytes. Example:
var a = [1'u8, 2, 3, 4, 5, 6, 7, 8] var b: array[8, uint8] swapEndian64(addr b, addr a) assert b == [8'u8, 7, 6, 5, 4, 3, 2, 1]Source Edit
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/endians.html