1

問題

printf一部の Cコードを に変換しようとしていますstd::ostringstreamが、16 進/ターミナル エンコーディングに問題があります。おそらく、シーケンスをすぐに翻訳する必要があると思います\x1b[48;5;が、C++ で同等のものが何であるかはわかりません。

悪い結果、部分的 (C++)

Color cube, 6x6x6:
1b[48;5;10m  1b[48;5;10m  1b[48;5;11m  1b[48;5;11m  1b[48;5;12m  1b[48;5;12m  1b[48;5;13m  1b[48;5;13m  1b[48;5;14m  1b[48;5;14m  1b[48;5;15m  1b[48;5;15m  1b[0m 1b[48;5;34m  1b[48;5;34m  1b[48;5;35m  

良い結果、xterm (C)

ここに画像の説明を入力

Cコード

void Color_Cube()
{
  for (unsigned green=0; green<6; ++green)
  {
    for (unsigned red=0; red<6; ++red)
    {
      for (unsigned blue=0; blue<6; ++blue)
      {
        unsigned color = 16 + (red * 36) + (green * 6) + blue;
        printf( "\x1b[48;5;%dm  ", color );
      }
      printf( "\x1b[0m " );
    }
    printf( "\n" );
  }
}

失敗した C++ コード

void Color_Cube_cpp()
{
  std::ostringstream  oss;
  for (unsigned green=0; green<6; ++green)
  {
    for (unsigned red=0; red<6; ++red)
    {
      for (unsigned blue=0; blue<6; ++blue)
      {
        unsigned color = 16 + (red * 36) + (green * 6) + blue;
        oss << std::hex << static_cast<int>(0x1b) << std::dec
          << "[48;5;" << color << "m  ";
      }
      oss << std::hex << static_cast<int>(0x1b) << std::dec << "[0m ";
    }
    oss << "\n";
  }
  std::cerr << oss.str() << "\n";
}
4

2 に答える 2