• 资料介绍
    • 引言
    • 问题
    • 原因分析
    • 小结
  • 资料预览
  • 相关推荐
申请入驻 产业图谱

LAT1316 显示动态文本时wchar字符问题

03/24 09:02
331
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1316 显示动态文本时wchar字符问题

516.83 KB

引言

在 TouchGFX 中,文本框控件可用来显示文字,如果使用 wildcard(通配符)功能,就可以实现动态文本显示。比如手环类应用中,当手环收到手机推送过来的信息后,就可以用文本框控件动态显示收到的信息。动态文本显示通常会使用 wildcard buffer,当需要更新文本时,直接更新 wildcard buffer,再重绘 TextArea 控件就可以更新显示的文本了。

问题

TouchGFX 代码使用 C++编程语言,使用 Unicode 字符来表示文字,每个字符占用 2字节。在动态文本显示时,通常会使用 Unicode::snprintf 函数,将字符串格式化到wildcard buffer 中,而这里的字符串就必须是 UnicodeChar*类型。C++支持 char 字符和 wchar 宽字符,在测试时,可使用以下代码来更新动态显示,其中 L 表示 wchar 宽字符。

如果您不使用 L 前缀,则假定字符串字面值为窄字符串,其中包含 ASCII 或其他 8 位字符。

原因分析

修改代码进行调试,在 Windows 上 Simulator 中正常运行,可看到 wchar 字符占用2 个字节;在开发板上调试时发现,wchar 字符占用了 4 个字节,而 snprintf 函数按Unicode 来解析字符串,解析完第一个字符’d’后,就碰到 0x0000 空字符,解析过程就结束了,因此控件只显示了第一个字符’d’。

小结

在使用 Unicode 字符时要确定好数据类型。wchar 在不同编译环境中做占用内存字节数不同,在代码中尽量不使用’L’前缀。除了’L’之外,还有另一个前缀’u’可用于创建宽字符串,它表示 16 位 Unicode 字符,编码为 UTF-16。需要注意的是 KEIL 无法识别’u’前缀。当然,将 char 字符串格式化到 TextArea wildcard buffer 中时,也使用Unicode::strncpy 函数代替 Unicode::snprintf 函数。

资料预览

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!