From ac809c4a9f0bb4b4b22a5be7dbb2e0f16d0008e0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 22 Apr 2024 09:29:38 +0200 Subject: [PATCH] support function --- common/commonutil.c | 10 ++++++++++ common/commonutil.h | 1 + 2 files changed, 11 insertions(+) diff --git a/common/commonutil.c b/common/commonutil.c index c9ae5981c..79985099c 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -144,6 +144,16 @@ uint32_t reflect32(uint32_t b) { return v; } +uint64_t reflect64(uint64_t b) { + // https://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable + uint64_t v = b; // 32-bit word to reverse bit order + // swap 2-byte long pairs + uint64_t v1 = reflect32(v >> 32); + uint64_t v2 = reflect32(v); + v = (v1 << 32) | (v2 & 0xFFFFFFFF); + return v; +} + void num_to_bytes(uint64_t n, size_t len, uint8_t *dest) { while (len--) { dest[len] = (uint8_t) n; diff --git a/common/commonutil.h b/common/commonutil.h index a31c6c64e..a6dc243da 100644 --- a/common/commonutil.h +++ b/common/commonutil.h @@ -74,6 +74,7 @@ uint32_t reflect(uint32_t v, int b); // used in crc.c ... uint8_t reflect8(uint8_t b); // dedicated 8bit reversal uint16_t reflect16(uint16_t b); // dedicated 16bit reversal uint32_t reflect32(uint32_t b); // dedicated 32bit reversal +uint64_t reflect64(uint64_t b); // dedicated 64bit reversal void num_to_bytes(uint64_t n, size_t len, uint8_t *dest); uint64_t bytes_to_num(const uint8_t *src, size_t len);