#hex-string #hex #simd

无std faster-hex

快速十六进制编码

12 个版本 (6 个破坏性版本)

0.9.0 2023年11月23日
0.8.1 2023年9月6日
0.8.0 2023年6月19日
0.6.1 2021年8月31日
0.2.0 2018年11月7日

#6 in 值格式化

Download history 108797/week @ 2024-04-29 114247/week @ 2024-05-06 118863/week @ 2024-05-13 112590/week @ 2024-05-20 109363/week @ 2024-05-27 114903/week @ 2024-06-03 111862/week @ 2024-06-10 116023/week @ 2024-06-17 106800/week @ 2024-06-24 108771/week @ 2024-07-01 108003/week @ 2024-07-08 113132/week @ 2024-07-15 116865/week @ 2024-07-22 120314/week @ 2024-07-29 115310/week @ 2024-08-05 108750/week @ 2024-08-12

每月469,931次下载
用于 492 个crate(89 个直接使用)

MIT 许可证

56KB
1K SLoC

faster-hex

License crate-badge

此程序使用各种不同的指令集将切片编码为预定的目的地。

基准测试

运行

运行基准测试

cargo bench

结果

机器:MacBook Pro (Early 2015) (2.7 GHz Intel Core i5)

Rust: rustc 1.31.0 (abe02cefd 2018-12-04)

hex 比较

  • 编码速度快10倍以上
  • 解码速度快10倍以上

rustc-hex 比较

  • 编码速度快2.5倍以上
  • 解码速度快7倍以上

示例

编码为十六进制

use faster_hex::hex_string;

let result = hex_string(b"Hello world!");
assert_eq!(result, "48656c6c6f20776f726c6421");

编码为大写十六进制

use faster_hex::hex_string_upper;

let result = hex_string_upper(b"Hello world!");
assert_eq!(result, "48656C6C6F20776F726C6421");

解码

use faster_hex::hex_decode;

let src = b"48656c6c6f20776f726c6421";
let mut dst = vec![0; src.len() / 2];
hex_decode(src, &mut dst).unwrap();
assert_eq!(dst, b"Hello world!");

带有大小写检查的解码

use faster_hex::{hex_decode_with_case, CheckCase};

let src = b"48656c6c6f20776f726c6421";
let mut dst = vec![0; src.len() / 2];

assert!(hex_decode_with_case(src, &mut dst, CheckCase::Lower).is_ok());
assert_eq!(dst, b"Hello world!");

assert!(hex_decode_with_case(src, &mut dst, CheckCase::None).is_ok());
assert_eq!(dst, b"Hello world!");

assert!(hex_decode_with_case(src, &mut dst, CheckCase::Upper).is_err());

Serde功能


use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
struct Simple {
  #[serde(with = "faster_hex")]
  foo: Vec<u8>,
  #[serde(with = "faster_hex::nopfx_lowercase")]
  bar: Vec<u8>,
}

注意

主版本零(0.y.z)用于初始开发。任何内容都可能在任何时候更改。公共API不应被视为稳定。

在1.0.0之前进行不兼容API更改时的次要版本。

许可证

本项目采用MIT许可证

第三方软件

本产品包含第三方开发的软件的副本和修改

请参阅源代码文件以获取更多详细信息。

第三方许可证的副本可在 LICENSE-THIRD-PARTY 中找到。

依赖关系

~110–340KB