• 資料介紹
    • 引言
    • 問題
    • 原因分析
    • 小結
  • 資料預覽
  • 相關推薦
申請入駐 產業(yè)圖譜

LAT1316 顯示動態(tài)文本時wchar字符問題

03/24 09:02
532
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1316 顯示動態(tài)文本時wchar字符問題

516.83 KB

引言

在 TouchGFX 中,文本框控件可用來顯示文字,如果使用 wildcard(通配符)功能,就可以實現動態(tài)文本顯示。比如手環(huán)類應用中,當手環(huán)收到手機推送過來的信息后,就可以用文本框控件動態(tài)顯示收到的信息。動態(tài)文本顯示通常會使用 wildcard buffer,當需要更新文本時,直接更新 wildcard buffer,再重繪 TextArea 控件就可以更新顯示的文本了。

問題

TouchGFX 代碼使用 C++編程語言,使用 Unicode 字符來表示文字,每個字符占用 2字節(jié)。在動態(tài)文本顯示時,通常會使用 Unicode::snprintf 函數,將字符串格式化到wildcard buffer 中,而這里的字符串就必須是 UnicodeChar*類型。C++支持 char 字符和 wchar 寬字符,在測試時,可使用以下代碼來更新動態(tài)顯示,其中 L 表示 wchar 寬字符。

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

原因分析

修改代碼進行調試,在 Windows 上 Simulator 中正常運行,可看到 wchar 字符占用2 個字節(jié);在開發(fā)板上調試時發(fā)現,wchar 字符占用了 4 個字節(jié),而 snprintf 函數按Unicode 來解析字符串,解析完第一個字符’d’后,就碰到 0x0000 空字符,解析過程就結束了,因此控件只顯示了第一個字符’d’。

小結

在使用 Unicode 字符時要確定好數據類型。wchar 在不同編譯環(huán)境中做占用內存字節(jié)數不同,在代碼中盡量不使用’L’前綴。除了’L’之外,還有另一個前綴’u’可用于創(chuàng)建寬字符串,它表示 16 位 Unicode 字符,編碼為 UTF-16。需要注意的是 KEIL 無法識別’u’前綴。當然,將 char 字符串格式化到 TextArea wildcard buffer 中時,也使用Unicode::strncpy 函數代替 Unicode::snprintf 函數。

資料預覽

相關推薦