Unicode 到整数转换 Visual Studio Bug

bob*_*555 1 c++ windows unicode visual-studio-2022

我试图将 unicode 字符转换为整数,并在 Visual Studio 中遇到错误,不确定它是错误还是我做错了什么

该项目具有 unicode 字符集,而不是多字节。

#include <windows.h>
#include <iostream>

int main()
{
    constexpr int a = L'';

    printf("%i\n", a);
    std::cout << a << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题:鼠标悬停变量“a”显示其 129408 或 0x1F980 这是正确的,但当它将其打印到控制台时,我得到 55358

我创建了一个新项目并编写了相同的代码,它打印出了正确的值,但是在将同一项目从 unicode 切换到多字节并返回到 unicode 后,它产生了这个问题,不知道如何解决这个问题。

Mar*_*som 6

Visual Studio 中的宽字符只有 16 位,这意味着它们不会容纳大于 65535 的值。您将获得以 UTF-16 编码的字符的前半部分,即 d83e dd80。

  • @bobjafari555 应该打开警告(/W4)。“警告 C4066:忽略宽字符常量中第一个以外的字符”。 (2认同)