【问题标题】:How to create a std::wstring using the ascii codes of characters in C++?如何使用 C++ 中字符的 ascii 代码创建 std::wstring?
【发布时间】: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的排列组合?
  • 不,它只是一个包含这些字符的字符串。

标签: c++ string ascii wstring


【解决方案1】:

这是一个关于字符集转换的技巧问题吗? :) 因为标准不保证 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 * 时添加的

【讨论】:

    【解决方案2】:

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

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

    std::wstring s;
    
    s.push_back(65);
    s.push_back(0);
    
    std::wcout << s << std::endl;
    

    不要忘记 0 终止符!

    【讨论】:

    • 嗯...字符串与向量有点不同,但它们都遵循标准集合接口准则。
    • 您确实不必必须添加零终止符。放入字符串的内容。当/如果你想要一个以零结尾的 C 风格字符串,它的 c_str() 成员会给你。
    • 实际上,根据当前的标准,basic_string&lt;char_t&gt; 不需要有连续存储——它可以更像一根绳索而不是矢量来实现,并且仍然是合法的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多