在未格式化的输出c ++中打印出来

时间:2012-11-30 20:57:15

标签: c++ io output

我正在创建一个霍夫曼树,我想在未格式化的输出中打印出每个字母的频率。但是,我的问题是我无法打印任何内容。这是我的过程:

char c;
unsigned int freqArray[256];
unsigned int valueShifted[256];

while (!cin.eof())
{
  c = cin.get();
  freqArray[(int)c]++;
} //mapping my frequency array to the letter it sees


void shifting(unsigned int *freqArray, unsigned int *valueShifted)
{
  for(int i = 0; i < 256; i++)
  {
    if(freqArray[i] > 0)
    {
      valueShifted[i] = (freqArray[i] << 24) | ((freqArray[i] << 8) & 0x00ff0000) | ((freqArray[i] >> 8) & 0x0000ff00) | (freqArray[i] >> 24); // shifting of bits
    }
  }


  shifting(freqArray, valueShifted);
  for(int i = 0; i < 256; i++)
  {
    if(valueShifted[i] > 0)
    {
      cout.write((char*)&valueShifted[i], sizeof(valueShifted[i])); //this is not printing anything
    }
  }

可能有人知道为什么这不打印任何东西?我猜测我的错误可能是因为我不是用HEX打印出来的,但我并不完全确定......如果有人能帮助我做得那么好!谢谢!

1 个答案:

答案 0 :(得分:3)

您想要输出数组中的每个unsigned int吗?

cout << valueShifted[i];

write是低级写入。在您的示例中,您需要使用二进制编辑器来查看您正在编写的值。根据您的终端和数据内容,将二进制数据转储到stdout可能会导致打印垃圾,或者什么都没有。