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的简单实例

Squareline Studio + LVGL实战:从Figma设计到MCU屏幕的UI开发一条龙(避坑中文显示)

本文详细介绍了使用Squareline Studio和LVGL实现从Figma设计到MCU屏幕UI开发的全流程,重点解决中文显示等常见问题。通过设计工具链搭建、设计稿转换、LVGL工程集成及性能优化等步骤,帮助开发者高效完成嵌入式GUI开发,提升开发效率。

weixin_29246195的博客 584

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

CTS实战:如何用set_sense优化时钟树平衡(附ICC2避坑指南)

本文深入探讨了在时钟树综合(CTS)中,如何正确使用`set_sense`命令优化时钟树平衡,并对比了其与`set_disable_timing`的本质区别。通过实战案例详细解析了`-stop_propagation`和`-clock_leaf`参数的应用场景,并提供了ICC2工具中的关键避坑指南,帮助后端工程师精准控制时钟拓扑,避免时序分析漏洞。

weixin_28933797的博客 459

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

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

Xiao_Ley的博客 1876

[NVME] CMBLOC-Controller Memory Buffer Location

CMBLOC-Controller Memory Buffer Location

jinyuya的博客 990

32、社交媒体大数据中的情感分析与网络欺凌检测

本文探讨了社交媒体大数据在情感分析和网络欺凌检测中的应用。情感分析有助于应对自动化带来的社会变化、促进社会包容和推动环境保护。网络欺凌作为一种严重的在线危害,其检测依赖于数据预处理、特征提取与深度学习模型(如CNN、LSTM)进行分类。文章还总结了大数据在欺诈检测、医疗、制造、交通等领域的广泛应用,并分析了数据存储、处理速度、质量和技术工具等方面的挑战,提出了相应的应对策略。未来,随着技术进步,社交媒体大数据将在更多领域发挥关键作用。

cc789的博客 91

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

optee系统启动流程

BL2 - Trusted Boot Firmware,一般为Trusted Bootloader, 也称第一个启动镜像。BL31 - EL3 Runtime Firmware,负责双系统切换,运行在secure monitor 或ATF中。BL33 - Non-Trusted Firmware,一般为uboot、linux kernel。BL32 - Secure-EL1 Payload, 一般为TEE OS Image。BL1 - Trusted ROM,一般为BootRom。

baron-周贺贺-代码改变世界ctw 279
上一篇: 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、付费专栏及课程。

余额充值