【发布时间】:2010-08-11 14:34:43
【问题描述】:
我需要使用具有以下 ascii 值的字符创建一个 wstring:30、29、28、27、26、25。
在 VB6 中,我会做 asc(30) + asc(29)+ 等...
什么是 C++ 等价物?
谢谢!
【问题讨论】:
-
是不是30、29、28、27、26、25的排列组合?
-
不,它只是一个包含这些字符的字符串。
我需要使用具有以下 ascii 值的字符创建一个 wstring:30、29、28、27、26、25。
在 VB6 中,我会做 asc(30) + asc(29)+ 等...
什么是 C++ 等价物?
谢谢!
【问题讨论】:
这是一个关于字符集转换的技巧问题吗? :) 因为标准不保证 ASCII 字符由 wchar_t 中的 ASCII 整数值表示(即使对于大多数编译器/系统来说,这将是正确的)。如果重要,请使用适当的语言环境显式扩展您的字符:
std::wstring s; std::locale loc("C"); // 选择一个带有 ASCII 编码的语言环境 s.push_back(std::use_facet<:ctype> >(loc).widen(30)); s.push_back(std::use_facet<:ctype> >(loc).widen(29)); s.push_back(std::use_facet<:ctype> >(loc).widen(28));不要以尾随 0 结尾,它是在您通过调用 .c_str() 将 wstring 转换为 wchar_t * 时添加的
【讨论】:
std::wstring 只不过是伪装成字符串的 std::vector。
因此您应该可以使用 push_back 方法,如下所示:
std::wstring s;
s.push_back(65);
s.push_back(0);
std::wcout << s << std::endl;
不要忘记 0 终止符!
【讨论】:
c_str() 成员会给你。
basic_string<char_t> 不需要有连续存储——它可以更像一根绳索而不是矢量来实现,并且仍然是合法的。