C ++中的二进制字符串到byte []?

时间:2012-04-05 23:53:55

标签: c++ string qt byte

我实际上在Qt中使用QString。所以,如果有一个简单的功能,请告诉我:)

我正在考虑的是将二进制字符串逐字节存储到文件中:

QString code = "0110010101010100111010 /*...still lots of 0s & 1s here..*/";
ofstream out(/*...init the out file here...*/);
for(; code.length() / 8 > 0; code.remove(0, 8))    //a byte is 8 bits
{
    BYTE b = QStringToByte(/*...the first 8 bits of the code left...*/);
    out.write((char *)(&b), 1);
}
/*...deal with the rest less than 8 bits here...*/

我应该如何编写QStringToByte()函数?

BYTE QStringToByte(QString s)    //s is 8 bits
{
    //?????
}

感谢您的回复。

2 个答案:

答案 0 :(得分:1)

QString有一个很好的toInt方法,可以选择将base作为参数(在你的情况下为2)。只需删除8个字符以形成新的QString,然后执行str.toInt( &somebool, 2 )

没有错误检查,可能是:

BYTE QStringToByte(QString s)    //s is 8 bits
{
  bool ok;
  return (BYTE)(s.left( 8 ).toInt( &ok, 2 ));
}

(不要相信我的话,在我的生活中从来没有在Qt中写过一行)

答案 1 :(得分:0)

您可以尝试boost::dynamic_bitset将位写入文件。

void write_to_file( std::ofstream& fp, const boost::dynamic_bitset<boost::uint8_t>& bits )
{
     std::ostream_iterator<boost::uint8_t> osit(fp);
     boost::to_block_range(bits, osit);
}