【发布时间】:2019-03-13 04:55:21
【问题描述】:
我今天已经搜索了几个小时,但找不到任何适合我的东西。我刚刚看过的那个是“How to convert UTF-8 encoded std::string to UTF-16 std::string”。
我的问题是,简单解释一下:
我想在标准 C++ 中创建一个有效的 NTLM 哈希,并且我正在使用 OpenSSL 的库通过其 MD4 例程创建哈希。我知道该怎么做,那么有谁知道如何将std::string 转换为 UTF-16 LE 编码的字符串,我可以将其传递给 MD4 函数以获得正确的摘要?
那么,我可以拥有一个包含char 类型的std::string,并将其转换为UTF16-LE 编码的可变长度std::string_type 吗?是std::u16string,还是std::wstring?
我会使用s.c_str() 或s.data() 吗?length() 函数会在这两种情况下正确报告吗?
【问题讨论】:
-
你的标题问题很清楚,你的问题主体不是。您是否知道 UTF-16 仍然是可变长度的?你会在
std::u16string中保存一个UTF-16 字符串,而不是std::string? -- 你能关注这个问题吗?现在有点到处都是。 -
谢谢 DevSolar。你说的对。现在是深夜,我有点沮丧,所以结果有点乱。我知道 UTF16 是可变长度的,所以我正在寻找 std::string 到 std::u16string 或 std::wstring (如果可行的话)。我认为更好的问题可能是:我可以拥有一个包含 char 类型的 std::string,并将其转换为 UTF16-LE 编码的可变长度 std::string_type 吗?无论是 std::u16string 还是 std::wstring。
-
关于最后一个问题,
length()总是会正确返回字符串对象中 char 类型元素的数量 --char为std::string,char16_t为std::u16string,@ 987654337@ 为std::wstring。当然,这些(必然)都不等于代码单元/代码点的数量。 ;-) -
必须通过这些步骤 utf8 -> mono-entity-unicode -> utf16 。不知道代码点,你不可能从 8 到 16。
标签: c++ utf-8 character-encoding utf-16 stdstring