Ce face i32::from_str_radix
i32::from_str_radix("ff", 16) citește textul ca număr scris în baza 16 și returnează Ok(255). Baza poate fi între 2 și 36; după cifrele 0-9 se folosesc literele a-z (mari sau mici). Este acceptat un semn + sau - la început.
Prefixe ca 0x sau 0b nu sunt acceptate: taie-le înainte cu strip_prefix. Toate tipurile întregi au această funcție (u8::from_str_radix, u64::from_str_radix). Operația inversă, afișarea într-o bază, se face cu {:x}, {:X}, {:b}, {:o}.
Parametri
| Parametru | Descriere |
|---|---|
src |
Textul de citit. |
radix |
Baza: 2-36. O bază în afara intervalului produce panică. |
Ce returnează
Result<i32, ParseIntError>.
Exemple
Exemplul 1: Binar, octal, hexazecimal
fn main() {
println!("{:?}", i32::from_str_radix("1010", 2));
println!("{:?}", i32::from_str_radix("777", 8));
println!("{:?}", i32::from_str_radix("FF", 16));
println!("{:?}", i32::from_str_radix("-7f", 16));
println!("{:?}", i32::from_str_radix("rust", 36));
println!("{:?}", i32::from_str_radix("0xFF", 16));
println!("{:?}", i32::from_str_radix("102", 2));
let n = 2026;
println!("{n} = {n:b} (binar) = {n:o} (octal) = {n:X} (hex)");
}
Rezultat
Ok(10)
Ok(511)
Ok(255)
Ok(-127)
Ok(1299629)
Err(ParseIntError { kind: InvalidDigit })
Err(ParseIntError { kind: InvalidDigit })
2026 = 11111101010 (binar) = 3752 (octal) = 7EA (hex)
Exemplul 2: Culori HTML din hexazecimal
Fiecare pereche de cifre hex este o componentă de culoare, între 0 și 255.
fn rgb(culoare: &str) -> Result<(u8, u8, u8), String> {
let hex = culoare.strip_prefix('#').ok_or("culoarea trebuie să înceapă cu #")?;
if hex.len() != 6 {
return Err(format!("„{culoare}” trebuie să aibă 6 cifre hex"));
}
let comp = |i: usize| u8::from_str_radix(&hex[i..i + 2], 16).map_err(|e| format!("„{culoare}”: {e}"));
Ok((comp(0)?, comp(2)?, comp(4)?))
}
fn main() {
for c in ["#FF8800", "#1e90ff", "#12345G", "00FF00"] {
println!("{c}: {:?}", rgb(c));
}
}
Rezultat
#FF8800: Ok((255, 136, 0))
#1e90ff: Ok((30, 144, 255))
#12345G: Err("„#12345G”: invalid digit found in string")
00FF00: Err("culoarea trebuie să înceapă cu #")
Greșeli frecvente
- Dai textul cu prefix (
"0xFF"): eroareaInvalidDigit. Elimină prefixul custrip_prefix("0x"). - Citești în
i32un număr hex mare, ca"FFFFFFFF": este 4294967295, pestei32::MAX, deci eroarePosOverflow. Foloseșteu32.
Comenzi înrudite
ParseIntError: Eroarea returnată când un text nu poate fi transformat în număr întreg; kind() spune motivul exact.i32: Tipul implicit pentru numere întregi cu semn, pe 32 de biți: de la -2147483648 la 2147483647.u8: Întreg fără semn pe 8 biți (0-255): tipul unui octet, folosit pentru date binare și text ASCII/UTF-8.i32::count_ones: Numără biții de 1 din reprezentarea binară a numărului (de exemplu 0b1011 are 3).