如何将wchar_t转换为int以显示代码点?

时间:2010-06-30 05:11:41

标签: c++ character-encoding widestring widechar

我的程序中有一个简单的功能,当我想要搞乱unicode并用它做事时。在这个函数中,我希望显示用户输入的字符的代码值。它看起来可能,这是我的功能:

wstring listcode(wchar_t arg) {
    wstring str = L"";
    str += static_cast<int> (arg); //I tried (int) arg as well
    str += L": ";
    str += (wchar_t) arg;
    return str;
}

现在你看,我只是想显示整数值(比如as (int) "a"),但像listcode(L"&")这样的东西会显示为&: &

是不是可以找到这样宽字符的整数值?

1 个答案:

答案 0 :(得分:3)

在C ++中,您不能向字符串添加任何内容,只能添加字符和其他字符串。没有从int(或其他任何内容)到字符串的隐式转换。这就是字符串类型的设计方式 你做的是使用字符串流:

std::wstring listcode(wchar_t arg)
{
  std::wostringstream oss;
  oss << static_cast<int>(arg);
  oss << L": ";
  oss << arg;
  return oss.str();
}

但实际上,在C ++中转换为字符串时,最好将函数写入流,而不是返回字符串:

void listcode(std::wostream os, wchar_t arg)
{
  os << static_cast<int>(arg);
  os << L": ";
  os << arg;
}

这样,如果要将某些内容输出到控制台或文件,可以直接传递std::cout或文件流,如果需要字符串,则只需传递字符串流。