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
。