如何将二进制字符串转换为ASCII字符串?

时间:2017-10-07 06:29:13

标签: c++ ascii stringstream

我正在尝试将二进制字符串转换为可读的ASCII字符串。我能够将转换后的字符串成功输出到控制台作为可读文本但是当我尝试将其输出到文件时,它会将其输出为非英文字符。

void toHexx(string& in, ofstream& outFile)
{
   int temp[8]={0};
   char theChar[8];
   stringstream ss;

   for(int i=0;i<8;i++)
   {
      if(in.at(0)=='1')
         temp[i]+=128;
      if(in.at(1)=='1')
         temp[i]+=64;
      if(in.at(2)=='1')
         temp[i]+=32;
      if(in.at(3)=='1')
         temp[i]+=16;  
      if(in.at(4)=='1')
         temp[i]+=8;
      if(in.at(5)=='1')
         temp[i]+=4;
      if(in.at(6)=='1')
         temp[i]+=2;
      if(in.at(7)=='1')
         temp[i]+=1;

      in.erase(0,8);

       theChar[i]=(char) temp[i];

       ss << theChar[i];

   }

    cout << ss.str();
    outFile << ss.str();
}

1 个答案:

答案 0 :(得分:0)

你在这里做的不是十六进制转换(十六进制是一种不同的解释和呈现数据的方式。你将信息存储在一个整数数组中,每个单元代表一个位。 首先 - 如果你期望一个字节,它可以保存一个高达255的值,你为什么要将temp声明为int [8]?相反,你可以在'char'中持有它。 此外,您还有几个问题,包括参数的类型选择和一些逻辑问题。 我已经修改了你的功能,以执行我认为你想要的功能,看看差异,并试着看看你错在哪里。 祝你好运!

void binToChar(const std::string& in)
{
    char temp = 0;
    for (int i = 0; i<8; i++)
    {
        if ('1' == in.at(i)) {
            temp += pow(2, 7 - i);
        }
    }

    std::cout << temp;
}