在代表 UTF8 的有符号字符和无符号字符之间进行转换
Convert between signed char & unsigned char representing UTF8
我在同一项目中使用libxml2和icu。他们代表UTF8不同。libxml2使用未签名的char*,而ICU构造函数则采用普通的char*(在我的五角星64位上等同于签名的char)。
问题:如何在两者之间进行转换?我可以吗使用static_cast?
我了解UTF8仅关心基础数据类型至少要长8位。两者都签名和未签名char满足了这一点。我只是想知道是否有在这里陷入困境?有任何角案吗?
编辑:在我的编译器(G /Gentoo)坚持下,只有Reinterpret_cast才能进行此转换(而无需依赖C风格的铸件)。假设我们有两个未签名的char弦:0000和1000。转换会将它们都变成0。
有些库使用char
存储UTF-8,而另一些库则使用unsigned char
。
在这种情况下,您可能需要使用reinterpret_cast
在char*
和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);
如果无符号char*只是字符串的指针,它不应引起任何问题。
应该没关系。无论如何,一旦您需要从字符 *或无符号char *流中提取char,您将需要图书馆提供的功能,该功能将以不透明的方式提取int并更新指针/迭代器(呼叫者)
谢谢大家。迈克说最好的是:没有什么区别的差异,"字节是字节是一个字节"。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中