24个发布版本

0.5.0-pre62024年1月1日
0.5.0-pre52023年12月15日
0.5.0-pre22023年11月4日
0.5.0-alpha.82024年8月11日
0.3.1 2021年7月6日

#72 in 编码

Download history 276070/week @ 2024-05-03 299214/week @ 2024-05-10 293934/week @ 2024-05-17 290620/week @ 2024-05-24 306675/week @ 2024-05-31 291201/week @ 2024-06-07 288013/week @ 2024-06-14 287370/week @ 2024-06-21 280059/week @ 2024-06-28 310457/week @ 2024-07-05 293549/week @ 2024-07-12 296619/week @ 2024-07-19 303278/week @ 2024-07-26 297416/week @ 2024-08-02 308725/week @ 2024-08-09 277670/week @ 2024-08-16

1,240,167 每月下载量
439 个crate(5个直接使用)中使用

MIT 许可证

79KB
2K SLoC

rend是一个库,它为Rust提供端序感知原语。


rend的实际应用

use rend::*;

let little_int = i32_le::from_native(0x12345678);
// Internal representation is little-endian
assert_eq!(
    [0x78, 0x56, 0x34, 0x12],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(little_int) }
);

// Can also be made with `.into()`
let little_int: i32_le = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", little_int));
assert_eq!("0x12345678", format!("0x{:x}", little_int));

let big_int = i32_be::from_native(0x12345678);
// Internal representation is big-endian
assert_eq!(
    [0x12, 0x34, 0x56, 0x78],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(big_int) }
);

// Can also be made with `.into()`
let big_int: i32_be = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", big_int));
assert_eq!("0x12345678", format!("0x{:x}", big_int));

lib.rs:

rend

rend是一个库,它为Rust提供跨平台的原语。

rend不提供跨平台的替代类型,例如内置跨平台的类型如boolu8。它也不提供具有架构相关大小的类型的跨平台类型,如isizeusize。rend不支持自定义类型。

rend旨在用于构建可以在不同架构之间共享的可移植类型,特别是具有零拷贝反序列化的类型。

特性

  • bytecheck:启用使用bytecheck验证类型的支持

示例

use rend::*;

let little_int = i32_le::from_native(0x12345678);
// Internal representation is little-endian
assert_eq!(
    [0x78, 0x56, 0x34, 0x12],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(little_int) }
);

// Can also be made with `.into()`
let little_int: i32_le = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", little_int));
assert_eq!("0x12345678", format!("0x{:x}", little_int));

let big_int = i32_be::from_native(0x12345678);
// Internal representation is big-endian
assert_eq!(
    [0x12, 0x34, 0x56, 0x78],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(big_int) }
);

// Can also be made with `.into()`
let big_int: i32_be = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", big_int));
assert_eq!("0x12345678", format!("0x{:x}", big_int));

依赖项

~125KB