19个版本
0.7.2 | 2024年5月16日 |
---|---|
0.7.1 | 2024年3月28日 |
0.6.0 | 2023年3月21日 |
0.5.5 | 2023年3月19日 |
0.3.2 | 2022年10月13日 |
#119 in 算法
1,401 每月下载量
用于 iterextd
80KB
1.5K SLoC
num_convert
Rust库,用于整数转换。
描述
此库提供了一种从一种类型转换为另一种类型的方法。支持泛型类型。
整数类型之间的转换泛型特质。
- FromByAdd特质,用于从负整数转换为正整数或反之。
- IntoByAdd特质,用于将负整数转换为正整数或反之。
- TryFromByAdd特质,用于从负整数转换为正整数或反之,可能会失败。
- TryIntoByAdd特质,用于将负整数转换为正整数或反之,可能会失败。
- FromAs泛型特质,用于可能的溢出整数转换。
- IntoAs泛型特质,用于可能的溢出整数转换。
- TryFromDigits特质,用于将数字作为数值转换。
- TryFromIntStr特质,用于将字符串或整数转换为整数类型。
- FromTuple特质,用于将不同类型的元组转换为整数数组。
- TryFromTuple特质,用于将不同类型的元组转换为整数数组,可能存在转换错误。
其他整数特质。
- IntegerLen特质,用于确定整数的位数。
- Sbits特质,用于定义整数值的大小(位)。
- Tbits特质,用于定义整数类型的大小(位)。
- ToZero特质,用于实现类型的空值。
- ToMin特质,用于实现类型下限。
- ToMax特质,用于实现类型上限。
用法
将以下内容添加到您的Cargo.toml中
[dependencies]
num_convert = { git = "https://github.com/pic16f877ccs/num_convert", version = "0.7.0" }
或者使用cargo
cargo add num_convert --git "https://github.com/pic16f877ccs/num_convert"
示例
从负数转换为正数,从正数转换为负数。
use num_convert::FromByAdd;
assert_eq!(<u8>::from_by_add(-28i8), 100u8);
assert_eq!(<i8>::from_by_add(10u8), -118i8);
在整数类型之间进行转换。
use num_convert::IntoByAdd;
fn integer_to_integer<T1: IntoByAdd<U1>, T2: IntoByAdd<U2>, U1, U2>(min: T1, max: T2) -> (U1, U2) {
(min.into_by_add(), max.into_by_add())
}
assert_eq!(integer_to_integer(i16::MIN, u16::MAX), (u16::MIN, i16::MAX));
assert_eq!(integer_to_integer(u16::MIN, u16::MAX), (i16::MIN, i16::MAX));
从负数转换为正数,无错误和有错误。
use num_convert::TryFromByAdd;
assert_eq!(<u8>::try_from_by_add(-128i16), Some(0u8));
assert_eq!(<u8>::try_from_by_add(-129i16), None);
在128位类型之间无损转换。
use num_convert::TryIntoByAdd;
assert_eq!(<i128 as TryIntoByAdd<u128>>::try_into_by_add(i128::MIN), Some(u128::MIN));
assert_eq!(<u128 as TryIntoByAdd<i128>>::try_into_by_add(u128::MIN), Some(i128::MIN));
在U16和U8之间进行转换,无溢出和有溢出。
use num_convert::{IntoAs, FromAs};
assert_eq!(<u16 as IntoAs<u8>>::into_as(255u16), 255u8);
assert_eq!(<u16 as IntoAs<u8>>::into_as(258u16), 2u8);
assert_eq!(<u8>::from_as(261u16), 5u8);
从数字作为数值进行转换。
use num_convert::TryFromDigits;
let arr: [u32; 6] = [25_635_071, 25_634_091, 25_633_334, 25_636_309, 25_637_101, 25_636_243];
let val: Vec<u8> = arr.iter().map(|var| u8::from_digits(*var).unwrap_or(255u8) ).collect::<_>();
assert_eq!(val, [71, 91, 255, 255, 101, 243]);
整数值的大小(位)。
use num_convert::Sbits;
assert_eq!((-128i8).sbits(), 8u32);
assert_eq!(u64::MAX.sbits(), 64u32);
整数类型的大小(位)。
use num_convert::Tbits;
assert_eq!(i8::tbits(), 8u32);
assert_eq!(u64::tbits(), 64u32);
确定整数的位数。
use num_convert::IntegerLen;
assert_eq!(0i8.len(), 1usize);
assert_eq!(i8::MAX.len(), 3usize);
assert_eq!(i128::MAX.len(), 39usize);
assert_eq!(u128::MAX.len(), 39usize);
将元组转换为整数数组。
use num_convert::FromTuple;
assert_eq!(<i32 as FromTuple>::from_5((true, false, 45u8, 2023u16, -60i8,)), [1i32, 0i32, 45i32, 2023i32, -60i32]);
assert_eq!(<i32>::from_3((45u8, 2023u16, -53i8,)).iter().sum::<i32>(), 2015i32);
将字符串或整数转换为整数类型。
use num_convert::TryFromIntStr;
assert_eq!(<u16 as TryFromIntStr<&str>>::try_from_int_str("2023"), Ok(2023u16));
assert!(<u16 as TryFromIntStr<&str>>::try_from_int_str("20-2-2023").is_err());
assert_eq!(<u16 as TryFromIntStr<u128>>::try_from_int_str(22023), Ok(22023));
assert!(<u16 as TryFromIntStr<u128>>::try_from_int_str(222022).is_err());
assert_eq!(<i32 as TryFromIntStr<bool>>::try_from_int_str(true), Ok(1i32));
assert_eq!(<i32 as TryFromIntStr<bool>>::try_from_int_str(false), Ok(0i32));
将元组转换为整数数组。
use num_convert::TryTupToArr;
assert_eq!(TryTupToArr::<i32>::try_into_arr((45u8, 2023u16, -60i8,)),
Ok([45i32, 2023i32, -60i32]));
let arr: [i16; 3] = ("45", 2023u16, true,).try_into_arr().unwrap();
assert_eq!(arr, [45i16, 2023i16, 1i16]);
许可证
MIT