< 返回版块

jtr109 发表于 2020-09-15 17:01

Tags:Base62,学习

在自己开发了一个 Base62 转换库后,基于自己的理解阅读了另一个较成熟的库 base-62 并做了一些对比分析。

本人是 Rust 初学者,观点和分析可能都比较浅显,欢迎讨论交流。


Ext Link: https://jtr109.github.io/posts/rust-base62-lib/

评论区

写评论
作者 jtr109 2020-09-15 23:01

嗯,你说的对。我本来想能不能用一个 trait 表示的。没有留意返回类型的差异。这样看来确实 bytes array 还是最好的选择。

--
👇
Neutron3529: 明白了

但感觉就算std::usizeto_be_bytes,你也不可能把std::usizenum_biginit::BigUint的方法混用吧

毕竟签名一个是[u8;8](Note: This function returns an array of length 2, 4 or 8 bytes depending on the target pointer size.),一个是Vec<u8>,返回类型都不一样,又怎么用同一个函数处理呢?

--
👇
jtr109: 可能是我没有写明白,我对比的是 std::usizestd::u32 等也一样),他们提供的 bytes array 转换方法名叫 to_be_bytesnum_biginit::BigUint 里是 to_bytes_be。他们的方法名称不一致。

--
👇
Neutron3529: 这里不得不吐糟一下 num_bigint。虽然也实现了 byte array 转换,但是使用了的名称 to_bytes_be,和标准库中不一致。导致不能使用 trait 来解决问题。

这句话没看懂

pub fn to_bytes_le(&self) -> Vec<u8>
Returns the byte representation of the BigUint in little-endian byte order.

pub fn to_bytes_le(&self) -> (Sign, Vec<u8>)
Returns the sign and the byte representation of the BigInt in little-endian byte order.

明明num_bigint无论是Uint还是Int都有to_bytes_le啊

Neutron3529 2020-09-15 21:32

明白了

但感觉就算std::usizeto_be_bytes,你也不可能把std::usizenum_biginit::BigUint的方法混用吧

毕竟签名一个是[u8;8](Note: This function returns an array of length 2, 4 or 8 bytes depending on the target pointer size.),一个是Vec<u8>,返回类型都不一样,又怎么用同一个函数处理呢?

--
👇
jtr109: 可能是我没有写明白,我对比的是 std::usizestd::u32 等也一样),他们提供的 bytes array 转换方法名叫 to_be_bytesnum_biginit::BigUint 里是 to_bytes_be。他们的方法名称不一致。

--
👇
Neutron3529: 这里不得不吐糟一下 num_bigint。虽然也实现了 byte array 转换,但是使用了的名称 to_bytes_be,和标准库中不一致。导致不能使用 trait 来解决问题。

这句话没看懂

pub fn to_bytes_le(&self) -> Vec<u8>
Returns the byte representation of the BigUint in little-endian byte order.

pub fn to_bytes_le(&self) -> (Sign, Vec<u8>)
Returns the sign and the byte representation of the BigInt in little-endian byte order.

明明num_bigint无论是Uint还是Int都有to_bytes_le啊

作者 jtr109 2020-09-15 19:35

可能是我没有写明白,我对比的是 std::usizestd::u32 等也一样),他们提供的 bytes array 转换方法名叫 to_be_bytesnum_biginit::BigUint 里是 to_bytes_be。他们的方法名称不一致。

--
👇
Neutron3529: 这里不得不吐糟一下 num_bigint。虽然也实现了 byte array 转换,但是使用了的名称 to_bytes_be,和标准库中不一致。导致不能使用 trait 来解决问题。

这句话没看懂

pub fn to_bytes_le(&self) -> Vec<u8>
Returns the byte representation of the BigUint in little-endian byte order.

pub fn to_bytes_le(&self) -> (Sign, Vec<u8>)
Returns the sign and the byte representation of the BigInt in little-endian byte order.

明明num_bigint无论是Uint还是Int都有to_bytes_le啊

Neutron3529 2020-09-15 18:35

这里不得不吐糟一下 num_bigint。虽然也实现了 byte array 转换,但是使用了的名称 to_bytes_be,和标准库中不一致。导致不能使用 trait 来解决问题。

这句话没看懂

pub fn to_bytes_le(&self) -> Vec<u8>
Returns the byte representation of the BigUint in little-endian byte order.

pub fn to_bytes_le(&self) -> (Sign, Vec<u8>)
Returns the sign and the byte representation of the BigInt in little-endian byte order.

明明num_bigint无论是Uint还是Int都有to_bytes_le啊

Mike Tang 2020-09-15 18:02

6

1 共 5 条评论, 1 页