GTK int 到 unicode char 转换以在 GTK 标签中显示
GTK int to unicode char conversion for display in GTK label
我正在从串口接收十六进制数据。
我已将十六进制数据转换为相应的 int 值。
我想在 GTK 标签上显示等效字符。
但是,如果我们看到字符映射表,则有从 0x00 到 0x20 的控制字符。
所以我想在转换后的int值上加上256,并显示相应的Unicode字符来标记。
但我无法将 int 转换为 Unicode。假设我有一个整数数组 266,267,289 ...
我应该如何将它转换为 Unichar 并显示在 GTK 标签上。
我知道这对你们所有人来说似乎都是非常基本的问题,但我已经苦苦挣扎了很多,但没有找到任何答案。请帮忙,
在 UI 元素上设置文本的 GTK 函数都采用 UTF-8 字符串。如果作为无符号字节写出,表示值 > 127 的 Unicode 代码点的单个无符号字节将不会形成有效的 UTF-8 字符串。我可以想出几种解决方法。
将代码点存储为 32 位整数(本质上是 UTF-32)并使用 iconv
库中的函数或类似的函数从UTF-32 到 UTF-8。 C 中还有其他广泛可用的转换实现。将无符号字节转换为 UTF-32 实际上相当于用三个前导零字节填充它——这很容易编码。
根据 8 位代码点值自行生成一个 UTF-8 字符串。由于您的值范围有限,因此这是 easy-ish。如果您查看 UTF-8 的写法,例如,此处:
https://en.wikipedia.org/wiki/UTF-8
你会看到你需要表示的值被写成两个无符号字节,第一个以二进制 110B 开头,第二个以 10B 开头。代码点值的位被拆分并分布在这两个字节之间。进行此转换需要一些掩蔽和 bit-shifting,但这并不困难。
说了这么多,我想知道你为什么要为用户可能不理解的标签分配一个字符?如果十六进制数不是可显示的字符,为什么不直接在标签上写呢?
我正在从串口接收十六进制数据。 我已将十六进制数据转换为相应的 int 值。
我想在 GTK 标签上显示等效字符。 但是,如果我们看到字符映射表,则有从 0x00 到 0x20 的控制字符。
所以我想在转换后的int值上加上256,并显示相应的Unicode字符来标记。
但我无法将 int 转换为 Unicode。假设我有一个整数数组 266,267,289 ... 我应该如何将它转换为 Unichar 并显示在 GTK 标签上。
我知道这对你们所有人来说似乎都是非常基本的问题,但我已经苦苦挣扎了很多,但没有找到任何答案。请帮忙,
在 UI 元素上设置文本的 GTK 函数都采用 UTF-8 字符串。如果作为无符号字节写出,表示值 > 127 的 Unicode 代码点的单个无符号字节将不会形成有效的 UTF-8 字符串。我可以想出几种解决方法。
将代码点存储为 32 位整数(本质上是 UTF-32)并使用
iconv
库中的函数或类似的函数从UTF-32 到 UTF-8。 C 中还有其他广泛可用的转换实现。将无符号字节转换为 UTF-32 实际上相当于用三个前导零字节填充它——这很容易编码。根据 8 位代码点值自行生成一个 UTF-8 字符串。由于您的值范围有限,因此这是 easy-ish。如果您查看 UTF-8 的写法,例如,此处:
https://en.wikipedia.org/wiki/UTF-8
你会看到你需要表示的值被写成两个无符号字节,第一个以二进制 110B 开头,第二个以 10B 开头。代码点值的位被拆分并分布在这两个字节之间。进行此转换需要一些掩蔽和 bit-shifting,但这并不困难。
说了这么多,我想知道你为什么要为用户可能不理解的标签分配一个字符?如果十六进制数不是可显示的字符,为什么不直接在标签上写呢?