1

我的程序中有一个简单的函数,当我想弄乱 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;
}

现在如您所见,我只想显示整数值(如 ascii 字符,例如(int) "a"),但类似的listcode(L"&")内容将显示为&: &!

不可能找到像这样的宽字符的整数值吗?

4

1 回答 1

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或文件流,如果你想要一个字符串,你只需传递一个字符串流。

于 2010-06-30T05:29:43.903 回答