|
|
|
|
|
by ramon156
27 days ago
|
|
Why not look at how other languages attack this? e.g. how does "42".parse() work in rust? Edit: https://doc.rust-lang.org/src/core/num/mod.rs.html#1537 interesting! It boils down to this pub const fn from_ascii_radix(src: &[u8], radix: u32) -> Result<u32, ParseIntError> { use self::IntErrorKind::*;
use self::ParseIntError as PIE;
// guard: radix must be 2..=36
if 2 > radix || radix > 36 {
from_ascii_radix_panic(radix);
}
if src.is_empty() {
return Err(PIE { kind: Empty });
}
// Strip leading '+' or '-', detect sign
// (a bare '+' or '-' with nothing after it is an error)
// accumulate digits, checking for overflow
Ok(result)
}
|
|
But it's not hard at all. It's not even as full of small issues that you can't handle the load, like dates. It's just annoying as hell.
The problem is exclusive to C and C++. It's created by the several rounds of standardization of broken behavior.