wxWidgets 中的 C 字符串

[size=medium]
在 wxWidgets 中处理 C 语言字符串真是一件令人头痛的事情,因为 wxWidgets 库是 C++ 编写的,类中的成员函数大多使用 wxChar*, wxString 作为参数。然而众所周知,在 C 语言里,字符串是以字符数组的形式存储,所以当 wxWidgets 需要和一些 C 库结合使用的时候,比如 Lua,难免会遇到将 C 字符串实例化成 wxString 或 wxChar* 对象的过程中出现乱码的问题。而且这种乱码的出现与一般编程中遇到的乱码不太一样,使用的转换方法不正确,不论是中文还是英文都会出现乱码,一视同仁。

一开始,我都是按照文档中的例子使用 wxString::Printf 方法进行转换,通常情况下不会有问题,例如:
[/size]


wxString temp;
temp.Printf(wxT("abc");//字符显示正确
temp.Printf(wxT("测试");//字符显示正确


[size=medium]
但是使用一段时间之后发现 Printf 函数只能正确得到第一个参数中的字符,其他参数中的字符都会变成乱码,即使是英文字符也会有问题,例如:
[/size]


wxString temp;
const char * str = "abc";
temp.Printf(wxT("%s", "abc");//temp会包含乱码
temp.Printf(wxT("%s", str);//temp会包含乱码


[size=medium]
阅读官方文档后,我发现 wxWidgets 还提供了另外一个函数 wxString::FromUTF8,函数声明如下:
[/size]


static wxString FromUTF8(const char* s)
static wxString FromUTF8(const char* s, size_t len)


[size=medium]
使用 wxString::FromUTF8 就可以顺利地解决问题,而且这还是一个静态函数,不需要实例化就可以调用,函数执行成功会返回 wxString 的一个实例:
[/size]


const char * str = "abc";
wxString::FromUTF8("abc");//返回 wxString 实例,值为"abc"
wxString::FromUTF8(str);//返回值与上一条语句相同


[size=medium]
如果遇到要将 wxString 转化成为 char* 的情况,有三个函数可供使用:wxString::c_str(), wxString::wc_str(), wxString::mb_str()

mb_str returns a C string representation of the string, a const char*, regardless of whether Unicode is enabled. In Unicode mode, the string is converted, and data may be lost.

wc_str returns a wide character representation of the string, a wchar_t*, regardless of whether Unicode is enabled. In ANSI mode, the string is converted to Unicode.

c_str returns a pointer to the string data (const char* in ANSI mode, const wchar_t* in Unicode mode). No conversion takes place.[/size]
31、wxWidgets 开发:自定义控件与字符串处理 本文深入探讨了wxWidgets框架下的自定义控件开发与字符串处理技术。内容涵盖控件类与验证器设计、XRC资源处理、控件外观属性继承与默认设置,并以wxThumbnailCtrl为例展示复杂控件的实现。在字符串处理方面,详细介绍了wxString类的使用、Unicode兼容性、与C指针的转换、性能优化及常见错误规避。结合流程图、代码示例和综合应用,为开发者提供构建高效、跨平台GUI应用的实用指南。 阅读详情

相关推荐

wxWidgets:缓冲区类

wxWidgets:缓冲区类wxWidgets:缓冲区类wxXCharBuffer一般用法销毁wxCharBuffer wxWidgets:缓冲区类 wxWidgets 使用两类类来处理内存中的缓冲区。 第一个是处理字符缓冲区,即wxCharBuffer用于 char 指针或多字节 c 字符串,wxWCharBuffer用于 wchar_t 指针或宽字符 c 字符串。 其次,wxWidgets 使用wxMemoryBuffer来处理内存中的原始缓冲区,尽管目前很少使用。 wxXCharBuffer 一般用法

希望我的博客,能帮上你解决学习中工作中所遇到的问题 621

Rust语言编程实例

求当m = 3, n = 6时的值。古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?现在有个需求,要求你打印一个有6个台阶的楼梯,同时从上向下数,在楼梯的第4节台阶有个足球。4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数。

qq_52876054的博客 1474

wxWidgets:wxString概述

wxWidgets:wxString概述wxWidgets:wxString概述内部 wxString 编码使用 wxString 存储二进制数据与其他字符串类的比较关于使用 wxString 的建议隐式转换迭代 wxString 字符字符串相关的函数和类为您的应用程序调整 wxStringwxString 相关编译设置 wxWidgets:wxString概述 wxString是一个表示任意长度的 Unicode 字符串并包含任意 Unicode 字符的类。 该类具有您可以在字符串类中找到的所有标准操作:

希望我的博客,能帮上你解决学习中工作中所遇到的问题 965

【Rust】——项目实例:——命令行实例(一)

🎯接收命令行程序 🎃读取参数 🎃将参数值保存进变量 🎯读取文件 🎯重构 🎃二进制项目的关注分离 🎃提取参数解析器 🎃组合配置值 🎃修复错误处理 ✨改善错误信息 🎃从new中返回一个Result 🎃调用config::build并处理错误 🎃从main提取逻辑 🎃从run函数中返回错误 🎃处理main中run返回的错误 🎃将代码拆分到库crate

shsjssnn的博客 3813

wxWidgets:wxAny类用法

wxWidgets:wxAny类用法wxWidgets:wxAny类用法用法详细说明 wxWidgets:wxAny类用法 用法详细说明 #include <wx/any.h> 详细说明 所述wxAny类表示任何类型的容器。 它的值可以在运行时更改,可能更改为不同类型的值。 wxAny为向后兼容(但兑换)后继类wxVariant,基本上做同样的事情在更现代的,基于模板的方式,并与任何用户数据类型透明支持。 一些使用任意用户数据的伪代码示例: void SomeFunction() { M

希望我的博客,能帮上你解决学习中工作中所遇到的问题 648

wxWidgets:wxScopedCharTypeBuffer< T >类模板用法 cpp

需要注意的是,在使用wxScopedCharTypeBuffer时,缓冲区大小通常应该比字符串长度多1,以便存储字符串结束符’\0’。wxWidgets是一个跨平台的GUI框架,其中wxScopedCharTypeBuffer是一个非常实用的类模板。该类模板可以在C和C++中自动管理字符缓冲区的内存,避免了手动分配和释放内存的麻烦。总之,wxScopedCharTypeBuffer为C和C++程序员提供了一种方便、安全、高效的管理字符缓冲区内存的方式,使得我们可以更加专注于代码逻辑的实现。

BUG?不存在的! 144

rust 案例_Rust 基础笔记

通用编程概念变量与可变性变量默认不可变,如需要改变,可在变量名前加 mut 使其可变。例如:let mut a=1;。常量总是不能改变,使用 const 声明,并且必须注明值的类型。例如:const MAX_NUM: u32 = 100;。可以定义一个与之前变量同名的新变量,从而“遮盖”之前的变量,如下:let x = 5;let x = 6;let x = x * 2;println!("The...

weixin_30468419的博客 1926

RUST管理命令

管理命令RUST插件各种命令RUST++的命令

rust 案例_[每日更新] 每天挖掘一个 Rust 例子1

系列前言Rust 真是一门很不一样的语言呢。兼具高级和低级语言的特性独特的 ownership 制度各种现代工具在一种语言中的集中出现使得这门语言需要用新的角度去学习。本系列从基本示例出发,挖掘 Rust 的基本操作中和其他语言不同以及需要注意的地方。把各种坑拿出来说一说。嗯,就是这样,开始。StandbyMe2018.6.17注:因为 Rust 有些结构重名,读起来不容易理解,本文解释部分不会省...

weixin_42461035的博客 666

RUST服务器脚本

RUST的服务器脚本 有了这个服务器脚本之后大家就不用自己弄脚本了

wxWidgets教程(中文)

wxWidgetsGUI《Cross-Platform GUI Programming with wxWidgets》的清晰中文版

Rust程序设计语言-使用结构体来组织相关联的数据

和元组一样,结构体的每一部分可以是不同类型。 但不同于元组,结构体需要命名各部分数据以便能清楚的表明其值的意义。由于有了这些名字,结构体比元组更灵活:不需要依赖顺序来指定或访问实例中的值。 ...

yzpbright的博客 766

Rust 程序设计语言(第一版) 简体中文版

本文档为 The Rust Programming Language 的中文翻译。

wxWidgets 中的 C 字符串 mb_str

wxWidgets 中的 C 字符串 在 wxWidgets 中处理 C 语言字符串真是一件令人头痛的事情,因为 wxWidgets 库是 C++ 编写的,类中的成员函数大多使用 wxChar*, wxString 作为参数。然而众所周知,在 C 语言里,字符串是以字符数组的形式存储,所以当 wxWidgets 需要和一些 C 库结合使用的时候,比如 Lua,难免会遇到将 C...

weixin_34352449的博客 229

rustful 的java实例代码

用java实例的restful的简单实例

特斯拉 Model 3解析(八)全面拆解特斯拉自动驾驶大脑:AP控制器硬核技术解析

算力极限:双FSD = 144 TOPS,专为AI推理优化。存储架构:LPDDR4 + NAND + NOR,保证高速/可靠启动。通信架构:以太网传视频,CAN传控制,TSN保障实时性。感知输入:多路摄像头 + 高速SerDes,满足全景感知。电源设计:功率模块+被动元件海洋,稳定性优先。功能安全:双芯片冗余 + GPS + 紧急呼叫,容错率极高。🎯 在我看来,特斯拉AP控制器就是一台“车载超算”,它在电源设计、存储架构和功能安全上远超一般新势力方案。

weixin_43199439的博客 1442

C的strrchr()库函数与wxWidgets的wxString wxString :: BeforeLast()函数

查找字符串在另一个字符串中最后一次出现的位置—— C语言的sttr和wxWidgets的beforelast函数查找字符串在另一个字符串中最后一次出现的位置——     C语言的sttr和wxWidgets的beforelast函数wxWidgets的wxString的BeforeLast函数C语言的sttr 查找字符串在另一个字符串中最后一次出现的位置—— C语言的sttr和wxWidgets的beforelast函数) 查找字符串在另一个字符串中最后一次出现

yanxiaole_coder的博客 450

【wxWidgets 教程】工具类篇:wxString(七)

详细介绍 wxWidgets 的工具类之一:wxString类。文章介绍了wxString的使用方式、注意事项、性能问题等内容。

Xiao_Ley的博客 1876

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 627

三、Crowd与JIRA、Confluence用户集成并SSO单点登录

补充说明: 通过此方法集成后,用户、组以及用户和组的关系都在Crowd系统中存储,但各个系统的权限仍由各系统控制,也可在JIRA和Confluence中添加和删除用户。 在做步骤4和步骤5的时候,要特别小心,确保当前系统的超级权限用户(一般为admin,具体看当前系统的全局权限配置)和组以及它们的关系已经在Crowd中同样存在了,才可切换并禁用当前系统的内部用户目录,否则可能造成权限丢失等严重问题(因为禁用了内部用户目录,而Crowd中又不存在这个超级权限用户和组或它们的关系,所以权限就丢失了) 维护示例

weixin_38621072的博客 2985

C/C++ 开发库 | C/C++ Development Library

C/C++ 开发库 | C/C++ Development Library 这里收集一些著名的 C/C++ 开发库、SDK、类库、可复用类与结构代码 等信息,列举它们的介绍、参考和网站链接,为各位 C/C++ 程序员和爱好者提供检索和查阅类库的方便。 下面收集的 C/C++ 类库介绍整理来源于文章:C++ 资源之不完全导引(作者:曾毅、陶文),这篇文章曾发表于 2004 年 5 月《CSD

killer9806的专栏 940

南京理工大学计算机预推免面试(双非重点关注)

南京理工大学总体来说对双非学校比较友好,上岸率比较高,而且面试形式是线上,在预推免的过程中,可以作为重点关注的学校,但是一定要注意南理报名截止的时间,部分学校可能保研名额公示的比较晚,对于保研边缘人来说很可能会错过,我的建议是,即使不确定能否拿到保研名额,先查一下截止时间,先在系统上报名!!一旦拿到了offer,就是铁的,保底专硕,而且有很大的技巧性,一定要认真看哈!!!每个人的情况可能都不一样,如果有需要帮忙可以私我~~~

D1379951481的博客 2018
上一篇: Visual C++ 2008 Express Edition 编译 Lua
下一篇: wxWidgets 中使用 CxImage 库
arust
博客等级 码龄20年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值