rust与c语言字符串相互转换总结

news/2025/12/8 15:11:20/文章来源:https://www.cnblogs.com/guxuanqing/p/19321846
在 Rust 中,String 和 CString 分别用于不同的目的,因此它们的转换涉及内存布局所有权的变化
  • String:Rust 原生的、UTF-8 编码的、动态增长的字符串智能指针。
  • CString:与 C 语言兼容的字符串智能指针。它是一个以空字符(Null Terminator, \0)结尾的字节序列。

1. String 转换为 CString

使用 CString::new() 方法。此操作可能会失败,因此返回一个 Result
为什么会失败?
C 语言字符串要求空字符 \0 只能出现在字符串的末尾。如果你的 String 中间包含了 \0CString::new() 会返回一个 Err(NulError)
use std::ffi::CString;fn rust_to_c(data: String) -> CString {// CString::new 返回 Result,需要使用 expect 或 match 来处理错误let c_string = CString::new(data).expect("String 不能包含内部空字符(\\0)");c_string
}fn main() {let s = String::from("Hello, C world!");let c_str = rust_to_c(s);println!("CString 成功创建: {:?}", c_str);// let bad_s = String::from("Null\0Byte");// CString::new(bad_s).expect("这将导致程序崩溃"); 
}

2. CString 转换为 String

有两种主要方式,取决于你是想获取所有权还是仅获取引用。 
A. 获取所有权 (将 CString 消费掉)
使用 .into_string() 方法。此操作也返回一个 Result
为什么会失败?
虽然 CString 保证以 \0 结尾,但它不保证其内部字节是有效的 UTF-8 编码。String 必须是有效的 UTF-8。如果字节无效,会返回 Err(IntoStringError)
use std::ffi::CString;fn c_to_rust_owned(c_string: CString) -> String {// 将 CString 转换为 String,并消费掉 CStringlet rust_string = c_string.into_string().expect("CString 不是有效的 UTF-8 编码");rust_string
}// 完整示例结合:
let s = String::from("Hello");
let c_str = CString::new(s).unwrap();
let s_back = c_to_rust_owned(c_str);
println!("转换回来的 String: {}", s_back);
B. 获取引用 (从 &CStr 获取 &str)
如果你只需要读取 CString 的内容,可以获取它的引用 &CStr,然后转换为 Rust 的字符串切片 &str
  • 使用 .as_c_str() 获得 &CStr 引用。
  • 使用 .to_str() 获得 &str 引用(同样需要处理 UTF-8 错误)。
use std::ffi::{CStr, CString};fn c_ref_to_rust_ref(c_str: &CStr) -> &str {// 转换为 &str 引用,需要处理 UTF-8 错误let rust_slice = c_str.to_str().expect("CStr 不是有效的 UTF-8");rust_slice
}// 完整示例:
let c_str = CString::new("Example").unwrap();// 获取一个临时的 &CStr 引用
let rust_slice = c_str.as_c_str(); 
let final_str = c_ref_to_rust_ref(rust_slice);println!("引用方式转换: {}", final_str);
总结表格
 
方向使用方法返回类型(需错误处理)注意事项
String -> CString CString::new(s) Result<CString, NulError> String 中不能有 \0
CString -> String c_str.into_string() Result<String, IntoStringError> 字节必须是 UTF-8
&CStr -> &str c_str.to_str() Result<&str, Utf8Error> 字节必须是 UTF-8

参考资料:

1.rust字符串数据类型String、str、CString和CStr

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/992945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年靠谱的 GEO 公司推荐:官方深度测评必读

2025年靠谱的 GEO 公司推荐:官方深度测评必读在AI搜索渗透率以年均两位数攀升的当下,越来越多企业将目光投向生成式引擎优化(GEO),期望在AI对话中抢占品牌露出与答案控制的高地。然而,当企业试图寻找靠谱的GEO公…

2025年度十大竹制家具供应商排行榜,竹制品厂家哪家好

为帮助企业精准锁定适配自身需求的竹制家具合作伙伴,避免选型走弯路,我们从技术专利实力、产品耐候耐用性、环保认证资质、真实客户口碑及定制交付能力五大维度,对多家服务商展开深度评估,终筛选出2024年的10大专业…

2025年中国外墙砖品牌排行榜:迪泉外墙砖防滑性如何

外墙砖作为建筑外立面的门面担当,其防滑性、耐用性与品牌口碑直接影响建筑质量与居住安全。本文基于市场调研与真实用户反馈,筛选出5大的外墙砖品牌,为工程采购与家装选型提供客观参考,重点解析用户关注的迪泉外墙…

2025 年 12 月上海静安区泰国菜餐厅最新推荐,聚焦资质、案例、售后的五家品牌深度解读!

引言​ 随着中泰美食文化交流的深化,上海静安区泰国菜餐厅数量逐年递增,据泰国商务部国际贸易促进厅数据显示,中国大陆现有 218 家 “泰精选” 认证餐厅,其中静安区占比超 15%。但市场中部分餐厅存在香料以次充好、…

2025年重庆板栗鸡店排行榜,板栗鸡外卖推荐及热门板栗鸡外卖

山城重庆的烟火气里,藏着无数让人垂涎的美食,其中兼具滋补与风味的板栗鸡更是秋冬季节的心头好。想找到一家肉质紧实、板栗软糯、汤汁鲜美的板栗鸡店?想知道哪家的板栗鸡外卖能还原堂食风味?本文综合食材品质、口味…

基于FPGA的QPSK+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR

1.引言 基于FPGA的QPSK+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR。系统包括QPSK调制模块,QPSK解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,帧同步模块…

2025年武汉五大西点西餐职业教育机构排行榜,新东方西点西餐

为帮餐饮技能学习者高效锁定适配自身需求的职业教育机构,避免选型走弯路,我们从教学实操占比、校企合作资源、就业创业支持、真实学员口碑及课程适配性五大维度,对多家服务商展开深度评估,终精心筛选出2025年的10大…

2025年中国五大防盗门售后服务公司推荐:北京春天防盗门值得

本榜单依托全国防盗门行业服务调研数据、用户真实投诉与满意度反馈,深度筛选出十家售后响应及时、维修技术过硬的标杆企业,为消费者及经销商选型提供客观依据,助力快速匹配可靠的服务伙伴。 TOP1 推荐:春天防盗门 …

2025年中国全域外卖服务商排行榜:全域外卖招商有哪家?

本榜单基于全域外卖行业发展现状,结合市场份额、服务能力、客户口碑等多维度指标筛选出五家优质服务商,为企业入局全域外卖赛道提供客观参考,助力精准匹配合作伙伴。 TOP1 推荐:杭州斯创网络科技有限公司 推荐指数…

2025年葡萄牙名义雇主EOR公司推荐,Safeguard Global人力资源服务商助力企业合规雇佣

在全球化加速推进的当下,越来越多中国企业将目光投向欧洲市场,其中葡萄牙因稳定的营商环境、优越的地理位置以及对外国投资的友好政策,成为出海企业布局欧洲的重要跳板。然而,企业在葡萄牙开展本地雇佣时,常面临劳…

2025年抖音外卖服务商TOP5推荐:斯创全域外卖售后服务与

在本地生活服务数字化转型的浪潮中,抖音外卖凭借内容种草+即时配送的创新模式迅速崛起,成为商家拓展线上业务的重要阵地。然而,商家入驻抖音外卖需通过定向邀约,且面临运营门槛高、流量转化难等痛点,专业服务商的…

CF2009E-Klees SUPER DUPER LARGE Array!!!

CF2009E-Klees SUPER DUPER LARGE Array!!! 题目大意 给你一个长度为 \(n\) 的序列,包含 \([k,k+1,…,k+n-1]\) 。你可以从中挑选一个下标 \(i\) ,使得 \(x=|a_1+a_2+……+a_i-a_{i+1}-……-a_n]|\) 最小化。求可能的…

2025年言语语言障碍儿童公司权威推荐:资源教室核心装备/随班就读设备配置/智力障碍康复设备服务机构精选

据统计,约有7%-10% 的学龄前儿童面临着不同程度的言语语言障碍,早期、科学、有效的干预对其中超过80% 的儿童发展至关重要。随着科技与特殊教育的深度融合,市场已从单一的教具供应,转向集 “智能评估、个性化训练、…

2025年工业酒精经销商哪家好/代理加工厂哪个值得选/哪家专

为帮工业企业高效锁定适配自身需求的工业酒精供应合作伙伴,避免采购走弯路,我们从产品工艺(如纯度控制、杂质含量)、供货稳定性(含库存保障、物流时效)、合规资质(覆盖环保认证、安全检测)及真实客户口碑(侧重…

2025年东南亚自然风、简约地中海与古典装修风格三大流派TO

在南通这座江海交汇的城市,装修早已不是简单的空间改造,而是对理想生活方式的精准雕刻。当东南亚自然风的松弛感、简约地中海的系、古典风格的仪式感成为南通业主追逐的热门,如何找到既能精准还原风格精髓,又能适配…

2025 南美名义雇主 EOR 服务商推荐:Safeguard Global 合规用工优选

随着全球经济格局调整,南美市场凭借丰富自然资源、增长的消费群体及开放的投资环境,成为中国出海企业战略布局重点区域。但南美各国劳工法规差异大、社保体系复杂,加上语言文化壁垒,企业在当地雇佣员工面临诸多合规…

2025 年 12 月 GEO 服务商精选:深度实测的靠谱企业名单

2025年,生成式AI技术的飞速迭代重塑了流量生态,GEO(生成式引擎优化)已从“增长辅助工具”升级为企业抢占全域流量、突破增长瓶颈的核心战略抓手。随着市场需求激增,GEO服务商数量快速扩容,但资质参差不齐、服务能…

实用指南:Kubernetes 第四章:深入掌握Service-基础

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年中国数字文化展馆设计公司TOP5推荐:国创展览发展

本榜单依托行业资质审核、项目交付数据、客户真实口碑及技术创新能力四大维度,筛选出五家标杆企业,为展馆需求客户提供客观选型依据,助力精准匹配专业服务伙伴。 TOP1 推荐:河南国创展览展示有限公司 推荐指数:★…

详细介绍:STM32—— 嵌入式微控制器入门

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …