From 0a6a10d0c44c1d77d9e2f9fd40e5942fd4e5c15c Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 14 Aug 2019 13:45:23 +0300 Subject: [PATCH] sys: byteorder: Add support for sys_get_be64() There is sys_get_le64() already but nothing for 64-bit big-endian version. Fixes #18258 Signed-off-by: Jukka Rissanen --- include/sys/byteorder.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/sys/byteorder.h b/include/sys/byteorder.h index 33135f398fb..3f9a3a21498 100644 --- a/include/sys/byteorder.h +++ b/include/sys/byteorder.h @@ -229,6 +229,21 @@ static inline u32_t sys_get_be32(const u8_t src[4]) return ((u32_t)sys_get_be16(&src[0]) << 16) | sys_get_be16(&src[2]); } +/** + * @brief Get a 64-bit integer stored in big-endian format. + * + * Get a 64-bit integer, stored in big-endian format in a potentially + * unaligned memory location, and convert it to the host endianness. + * + * @param src Location of the big-endian 64-bit integer to get. + * + * @return 64-bit integer in host endianness. + */ +static inline u64_t sys_get_be64(const u8_t src[8]) +{ + return ((u64_t)sys_get_be32(&src[0]) << 32) | sys_get_be32(&src[4]); +} + /** * @brief Get a 16-bit integer stored in little-endian format. *