1 个不稳定版本
| 0.1.2 | 2019年4月22日 |
|---|---|
| 0.1.1 |
|
| 0.1.0 |
|
290 在 无标准库 中
29 每月下载量
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]将需要ops,option,iter,assert_eq!以及可能的其他东西。这是那些复杂因素之一。
语言功能
no-core将需要三个语言功能:sized,copy和freeze。
实现要求
如果您的平台是大端或小端,则no-core已完整(值是硬编码的)。
如果您的平台不是大端或小端,则no-core还需要为u16,u32和u64实现from_be。如果使用enable-128功能,则还需要实现u128的from_be。
许可证
本项目使用ISC许可证。请参阅LICENCE。