This module contains helpers that deal with different byte orders (endian).
Endianess 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.
Procs
proc bigEndian16(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 16-bit big-endian order. Both buffers are supposed to contain at least 2 bytes. Source Edit
proc bigEndian32(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 32-bit big-endian order. Both buffers are supposed to contain at least 4 bytes. Source Edit
proc bigEndian64(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 64-bit big-endian order. Both buffers are supposed to contain at least 8 bytes. Source Edit
proc littleEndian16(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 16-bit little-endian order. Both buffers are supposed to contain at least 2 bytes. Source Edit
proc littleEndian32(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 32-bit little-endian order. Both buffers are supposed to contain at least 4 bytes. Source Edit
proc littleEndian64(outp, inp: pointer) {.inline, ...raises: [], tags: [].}
- Copies inp to outp, storing it in 64-bit little-endian order. Both buffers are supposed to contain at least 8 bytes. Source Edit
proc swapEndian16(outp, inp: pointer) {.inline, noSideEffect, ...raises: [], tags: [].}
-
Copies 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: [].}
-
Copies 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: [].}
-
Copies 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