rust学习(字节数组转string)

最新在写数据传输相关的操作,发现string一个有趣的现象,代码如下:

rust 复制代码
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语言的思路,我添加了一个辅助类去转换,代码如下:

rust 复制代码
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();
        }
    }
}
相关推荐
翔云 OCR API几秒前
护照NFC识读鉴伪接口集成-让身份核验更加智能与高效
开发语言·人工智能·python·计算机视觉·ocr
程序喵大人9 分钟前
CMake入门教程
开发语言·c++·cmake·cmake入门
喜欢踢足球的老罗12 分钟前
Qoder AI IDE深度体验:用Repo Wiki与AskModel重塑开源库学习范式
人工智能·学习·qoder
半生过往26 分钟前
前端运行PHP 快速上手 使用 PHPStudy Pro 详细搭建与使用指南
开发语言·前端·php
zlpzlpzyd28 分钟前
ecmascript中Promise和async/await的区别
开发语言·前端·ecmascript
凛_Lin~~34 分钟前
安卓 Java线程八股文 (线程、多线程、线程池、线程安全)
android·java·开发语言
C语言不精39 分钟前
c语言-优雅的多级菜单设计与实现
c语言·开发语言·算法
geekmice39 分钟前
thymeleaf处理参数传递问题
开发语言·lua
LNN202241 分钟前
Qt 5.8.0 下实现触摸屏热插拔功能的探索与实践(2)
开发语言·qt
董世昌4143 分钟前
箭头函数和普通函数有什么区别
开发语言·javascript·ecmascript