gpt4 book ai didi

c++ - Windows 上代理项对(BMP 之外的 Unicode 字符)的 wchar_t* 大小

转载 作者:可可西里 更新时间:2023-11-01 13:28:24 25 4
gpt4 key购买 nike

我在 Windows 8 上遇到了一个有趣的问题。我测试过我可以用 wchar_t* 字符串表示 BMP 之外的 Unicode 字符。以下测试代码对我产生了意想不到的结果:

const wchar_t* s1 = L"a";
const wchar_t* s2 = L"\U0002008A"; // The "Han" character

int i1 = sizeof(wchar_t); // i1 == 2, the size of wchar_t on Windows.

int i2 = sizeof(s1); // i2 == 4, because of the terminating '\0' (I guess).
int i3 = sizeof(s2); // i3 == 4, why?

U+2008A 是 Han character ,它不在二进制多语言 Pane 中,因此它应该由 UTF-16 中的代理对表示。这意味着 - 如果我理解正确的话 - 它应该由两个 wchar_t 字符表示。所以我预计 sizeof(s2) 为 6(代理对的两个 wchar_t-s 为 4,终止\0 为 2)。

那么为什么 sizeof(s2) == 4?我测试了 s2 字符串构造正确,因为我用 DirectWrite 渲染了它,并且汉字显示正确。

更新:正如 Naveen 所指出的,我试图错误地确定数组的大小。以下代码产生正确的结果:

const wchar_t* s1 = L"a";
const wchar_t* s2 = L"\U0002008A"; // The "Han" character

int i1 = sizeof(wchar_t); // i1 == 2, the size of wchar_t on Windows.

std::wstring str1 (s1);
std::wstring str2 (s2);

int i2 = str1.size(); // i2 == 1.
int i3 = str2.size(); // i3 == 2, because two wchar_t characters needed for the surrogate pair.

最佳答案

sizeof(s2) 返回存储指针 s2 或任何其他指针所需的字节数,在您的系统上为 4 字节。它与s2指向的 存储在 中的字符无关。

关于c++ - Windows 上代理项对(BMP 之外的 Unicode 字符)的 wchar_t* 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503931/

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