units: Introduce public hex_u128 function
Introduce a function for parsing a `u128` from hex. Support strings with and without a `0x` prefix as we do for `hex_u32`.
This commit is contained in:
parent
9705d51782
commit
d33625f6e2
|
@ -101,6 +101,19 @@ pub fn hex_u32<S: AsRef<str> + Into<String>>(s: S) -> Result<u32, ParseIntError>
|
|||
})
|
||||
}
|
||||
|
||||
/// Parses a `u128` from a hex string.
|
||||
///
|
||||
/// Input string may or may not contain a `0x` prefix.
|
||||
pub fn hex_u128<S: AsRef<str> + Into<String>>(s: S) -> Result<u128, ParseIntError> {
|
||||
let stripped = strip_hex_prefix(s.as_ref());
|
||||
u128::from_str_radix(stripped, 16).map_err(|error| ParseIntError {
|
||||
input: s.into(),
|
||||
bits: 128,
|
||||
is_signed: false,
|
||||
source: error,
|
||||
})
|
||||
}
|
||||
|
||||
/// Strips the hex prefix off `s` if one is present.
|
||||
pub(crate) fn strip_hex_prefix(s: &str) -> &str {
|
||||
if let Some(stripped) = s.strip_prefix("0x") {
|
||||
|
@ -201,4 +214,18 @@ mod tests {
|
|||
let got = hex_u32("ab").expect("failed to parse non-prefixed hex");
|
||||
assert_eq!(got, want);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_u128_from_hex_prefixed() {
|
||||
let want = 3735928559;
|
||||
let got = hex_u128("0xdeadbeef").expect("failed to parse prefixed hex");
|
||||
assert_eq!(got, want);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_u128_from_hex_no_prefix() {
|
||||
let want = 3735928559;
|
||||
let got = hex_u128("deadbeef").expect("failed to parse non-prefixed hex");
|
||||
assert_eq!(got, want);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue