繁体   English   中英

如何在 c++ 中将扩展的 ascii 字符从 char 转换为 wstring

[英]How to convert extended ascii characters from char to wstring in c++

我使用 ifstream 的读取方法将文件读取到 char* memory 块中。 我对 memory 块中的每个字符调用我的 GetChar 方法以写入 wstring。 我正在尝试将 unicode 个字符写入屏幕(至少我认为它们是 unicode,如果我错了请纠正我 - 哦不,看起来我错了它的扩展 ascii)。 不幸的是,我让它工作的唯一方法是在 switch 语句中对 unicode 字符进行硬编码,但我宁愿它适用于任何字符,而不仅仅是我遇到并通过硬编码添加的字符。

这是我目前正在使用的:

std::wstring GetChar(char o)
{
  switch (o)
  {
  case 0x0D:
    return L"♪";
  case 0x0A:
    return L"◙";
  case -38:
    return L"┌";
  case -60:
    return L"─";
  case -77:
    return L"│";
  case -65:
    return L"┐";
  case -61:
    return L"├";
  case -76:
    return L"┤";
  case -2:
    return L"■";
  }

  std::wstring tmp_string(1, o);
  return tmp_string;
}

知道如何以通用方式将 -38 转换为 L"┌" 吗? [编辑]我发现我的映射实际上是扩展的ascii,,见网页https://www.sciencebuddies.org/science-fair-projects/references/ascii-table

我想我会尝试创建一个基于此网页的扩展 ascii 映射的 txt 文件: https://theasciicode.com.ar/是否有更简单的编程方式(例如使用 setlocale)?

您可以使用 std::map<char,wstring>。

wstring ConvertChar (const char target)
{
    static const std::map<char, wstring> convert = {{38,L"┌"}, {76, L"┤"} ....
    auto target = convert.find(target);
    if (target != convert.end())
        return *target;
    return L" ";// NOT found
}

或者有一些函数可以在 char 和 wide 之间进行转换。 请参阅如何将 char* 转换为 wchar_t*?

我得到了一个令我满意的解决方案。 我写了一个包含字节 00 到 FF 的密钥文件,然后我用 eXtreme(不再存在)查看了该文件,它可以显示扩展的 ascii 值,然后我将其复制到 Notepad++ 中并保存为 unicode 值文件。 然后我将 0x00 到 0xFF 映射到它们漂亮的扩展 ascii 字符(保存为 unicode),所有这些都显示得很好,就像 wstrings(没有硬编码值)。 有一天我可能也想支持常规的 unicode 作为另一种模式,但扩展的 ascii 足以满足我当前正在使用的文件。 如果有人需要,这里是 eXtreme 的存档版本: http://members.i.net.net.au/~bertdb/ryan/eXtreme/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM