如何在Rust中将String、str或char转换为ASCII数值?
在Rust中获取String、str、char的ASCII数值
你之前用的to_ascii_lowercase()只是把字符串转成小写形式,并不会输出ASCII数值,下面是针对不同类型的正确实现方式:
1. 处理char类型
单个char可以直接通过as u8转换为对应的ASCII数值,但要注意只有ASCII字符转换后才是正确的ASCII值,非ASCII字符转u8会被截断。示例:
let c = 'A'; let ascii_val = c as u8; // 结果为65 println!("{}", ascii_val);
如果需要确保字符是ASCII类型,可以先做判断:
let c = 'A'; if c.is_ascii() { let ascii_val = c as u8; println!("ASCII值:{}", ascii_val); } else { println!("该字符不是ASCII字符"); }
2. 处理String或str类型
String和str是字符序列,需要先定位到目标字符(比如第一个字符),再转换为ASCII值:
方式一:通过字符迭代获取(通用安全)
let key: String = String::from("A"); // 获取字符串的第一个字符,unwrap()适用于确定字符串非空的场景 let first_char = key.chars().next().unwrap(); if first_char.is_ascii() { let ascii_val = first_char as u8; println!("{}", ascii_val); // 输出65 }
方式二:直接取字节(仅适用于纯ASCII字符串)
Rust的String采用UTF-8编码,ASCII字符的UTF-8字节就是它的ASCII数值,所以如果能确定字符串是纯ASCII的,可以直接取字节:
let key: String = String::from("A"); let ascii_val = key.as_bytes()[0]; // 结果为65 println!("{}", ascii_val);
为了避免非ASCII字符串导致错误,建议先做ASCII校验:
let key: String = String::from("A"); if key.is_ascii() { let ascii_val = key.as_bytes()[0]; println!("ASCII值:{}", ascii_val); } else { println!("字符串包含非ASCII字符"); }
内容的提问来源于stack exchange,提问作者Favor Misongo
相关产品推荐
相关产品推荐

