最新在寫數據傳輸相關的操作,發現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();}}
}