#endianness #order #byte #basic #compile-time #u16 #u64

无 std sysfunc-byteorder

针对各种环境的编译时字节序基础库 #![no_std]

1 个不稳定版本

0.1.2 2019年4月22日
0.1.1 2019年4月22日
0.1.0 2019年4月21日

290无标准库

29 每月下载量

ISC 许可证

14KB
230

sysfunc-byteorder

此存储库包含编译时评估的基本字节序支持代码。最初设计得更为复杂,但最终简化以依赖 spec 模型来支持 rustc。现在使用 const fn 和宏工作来呈现字节序,适用于以下类型:

  • u8;
  • u16;
  • u32;
  • u64;
  • u128 (具有 'enable-128' 功能)。

有符号类型应该按相同方式工作(浮点类型也应如此,考虑到所有情况)。它主要存在是为了帮助调试和辅助底层代码,并确保基于移位的操作符(如 sysfunc-dynamac-shifty)可以针对奇特的处理器类型工作。

目前无法使用各种技巧,但这里的技巧应该足以满足大多数用途(模型已知但可能变化)。

函数

顺序指的是网络顺序(大端),而不是主机顺序(除非主机相同)

  • get_byte_order_128:返回一个 *const [u8; 16] 指针,其中的字节数从 0 到 15,表示顺序。
  • get_byte_order_64:返回一个 *const [u8; 16] 指针,其中的字节数从 0 到 7,表示顺序。
  • get_byte_order_32:返回一个 *const [u8; 16] 指针,其中的字节数从 0 到 3,表示顺序。
  • get_byte_order_16:返回一个从0到1的字节数组,表示顺序。

功能

  • default:不启用任何功能(我的crate的标准行为);
  • no-core:启用#![no_core]
  • enable-128:启用128位类型。

#![no_core]

由于#![no_core]假设您将提供自己的实现或部分实现,这里有一些基本要求。由于上游(Rust,见ISSUES.md)施加的限制,这些都是不幸的副作用。解决方案是使用from_be来触发特定平台的生成,该生成针对您自己的转换实现(无论如何都需要发生)。

注意:测试#![no_core]将需要opsoptioniterassert_eq!以及可能的其他东西。这是那些复杂因素之一。

语言功能

no-core将需要三个语言功能:sizedcopyfreeze

实现要求

如果您的平台是大端或小端,则no-core已完整(值是硬编码的)。

如果您的平台不是大端或小端,则no-core还需要为u16u32u64实现from_be。如果使用enable-128功能,则还需要实现u128from_be

许可证

本项目使用ISC许可证。请参阅LICENCE

无运行时依赖

功能