gpt4 book ai didi

c++ - 在表示 UTF 8 的 signed char 和 unsigned char 之间转换

转载 作者:太空狗 更新时间:2023-10-29 21:18:26 25 4
gpt4 key购买 nike

我在同一项目中使用 libxml2 和 ICU。他们代表UTF8 不同。 libxml2 使用 unsigned char*,而 ICU 构造函数采用纯 char*(在我的 Pentium 64 位上等同于 signed char)。

问题:如何在两者之间进行转换?我能不能使用 static_cast?

我理解UTF8只关心底层数据type 至少有 8 位长。 signed char 和 unsigned字符满足这个。我只是想知道是否有明白了吗?有什么极端情况吗?

编辑:在我的编译器 (g++/Gentoo) 的坚持下,只有 reinterpret_cast 可以进行这种转换(不依赖于 C 风格的转换)。假设我们有两个 unsigned char 字符串:0000 和 1000。转换会将它们都变成 0。在 UTF8 下这可能吗?

最佳答案

一些库使用 char 来存储 UTF-8,其他库使用 unsigned char

在这种情况下,您可能需要使用 reinterpret_castchar*unsigned char* 之间进行转换,因为这些类型具有相同的存储单元大小和对齐方式。例如:

char const* s = ...;
unsigned char const* p = reinterpret_cast<unsigned char const*>(s);

static_cast 始终可以通过中间转换为 void* 来模拟 reinterpret_cast,例如char* -> void* -> unsigned char*,例如:

char const* s = ...;
void const* intermediate = s;
unsigned char const* p = static_cast<unsigned char const*>(intermediate);

关于c++ - 在表示 UTF 8 的 signed char 和 unsigned char 之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30228741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com