1

我需要使用具有以下 ascii 值的字符创建一个 wstring:30、29、28、27、26、25。

在 VB6 中,我会做 asc(30) + asc(29)+ 等...

什么是 C++ 等价物?

谢谢!

4

2 回答 2

5

这是关于字符集转换的技巧问题吗?:) 因为标准不保证 ASCII 字符由 wchar_t 中的 ASCII 整数值表示(即使对于大多数编译器/系统来说,这将是正确的)。如果重要,请使用适当的语言环境显式扩展您的字符:

std::wstring s;
std::locale loc("C"); // 选择一个带有 ASCII 编码的语言环境

s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(30));
s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(29));
s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(28));

不要以尾随 0 结尾,它是在您通过调用 .c_str() 将 wstring 转换为 wchar_t * 时添加的

于 2010-08-11T17:08:29.973 回答
1

std::wstring 只不过是伪装成字符串的 std::vector。

因此,您应该能够使用 push_back 方法,如下所示:

std::wstring s;

s.push_back(65);
s.push_back(0);

std::wcout << s << std::endl;

不要忘记 0 终结符!

于 2010-08-11T14:39:16.043 回答