最新在写数据传输相关的操作,发现string一个有趣的现象,代码如下:
fn main() {
let mut data:[u8;32] = [0;32];
data[0] = 'a' as u8;
let my_str1 = String::from_utf8_lossy(&data);
let my_str = my_str1.trim();
println!("my_str len is {},my_str is {}",my_str.len(),my_str);
}
哈哈,猜猜最后结果如何?
哈哈,字符串长度竟然是32..按照我们以前写C语言的习惯,字节数据从第二位开始都是0,照理应该算是终结符,所以字符串长度应该是1啊。哈哈。所以大家转换的时候一定要留意这个问题。为了按照C语言的思路,我添加了一个辅助类去转换,代码如下:
pub fn to_string(data:&[u8])->String {
let ret = data.iter().position(|&value| value == 0);
match ret {
Some(index) => {
if index == 0 {
return String::from("");
} else {
return String::from_utf8(data[0..index].to_vec()).unwrap();
}
}
None => {
return String::from_utf8(data.to_vec()).unwrap();
}
}
}