Crate endian_num
source ·Expand description
Byte-order-aware numeric types.
This crate provides the Be (big-endian) and Le (little-endian) byte-order-aware numeric types.
The types aim to provide a similar API to other numeric types from core::num, such as NonZero, Saturating, and Wrapping.
The core API looks roughly like this (correspondingly for Be):
#[repr(transparent)]
pub struct<T> Le(pub T);
impl Le<T: Integer> {
pub const fn from_ne(n: T) -> Self;
pub const fn from_be(n: Be<T>) -> Self;
pub const fn to_ne(self) -> T;
pub const fn to_be(self) -> Be<T>;
pub const fn to_be_bytes(self) -> [u8; mem::size_of::<Self>()];
pub const fn to_le_bytes(self) -> [u8; mem::size_of::<Self>()];
pub const fn to_ne_bytes(self) -> [u8; mem::size_of::<Self>()];
pub const fn from_be_bytes(bytes: [u8; mem::size_of::<Self>()]) -> Self;
pub const fn from_le_bytes(bytes: [u8; mem::size_of::<Self>()]) -> Self;
pub const fn from_ne_bytes(bytes: [u8; mem::size_of::<Self>()]) -> Self;
}The types also implement appropriate traits from core::cmp, core::convert, core::fmt, and core::ops and provide additional helper methods for computations.
In addition to widening and byte-reordering From implementations, the endian number types implement conversions to and from arrays of smaller number types of the same ordering.
This is useful in situations, where a larger field has to be treated as multiple smaller field.
§Examples
use endian_num::Le;
let a = Le::<u32>::from_ne(0x1A);
let b = Le::<u32>::from_ne(0x2B00);
assert_eq!((a + b).to_le_bytes(), [0x1A, 0x2B, 0x00, 0x00]);§Optional features
This crate has the following optional features:
bitflags—BeandLeimplementBits,ParseHex, andWriteHex.bytemuck—BeandLeimplementZeroableandPod.linux-types— Type aliases like inlinux/types.h, such asle32.zerocopy—BeandLeimplementFromZeroes,FromBytes, andAsBytes.
§Related crates
- endian-type
- endian-type-rs — Depends on
num. - endiantype
- nora_endian
- simple_endian — Also provides
f32,f64, andbooltypes. zerocopy::byteorder— These types areUnaligned, which makes them unsuitable for volatile memory operations.
Structs§
- An integer stored in big-endian byte order.
- An integer stored in little-endian byte order.
Type Aliases§
- be16
linux-typesA 16-bit unsigned integer stored in big-endian byte order. - be32
linux-typesA 32-bit unsigned integer stored in big-endian byte order. - be64
linux-typesA 64-bit unsigned integer stored in big-endian byte order. - be128
linux-typesA 128-bit unsigned integer stored in big-endian byte order. - le16
linux-typesA 16-bit unsigned integer stored in little-endian byte order. - le32
linux-typesA 32-bit unsigned integer stored in little-endian byte order. - le64
linux-typesA 64-bit unsigned integer stored in little-endian byte order. - le128
linux-typesA 128-bit unsigned integer stored in little-endian byte order.