读取文本中的二进制数据的问题?

假设我有一个txt文本,所含的内容如下:

01011111
01000010
010111
010000
0011
0000
1011101
1001001
……

长度是随机的,但每两行的长度是相同的。每次读入两行,把每一行转化为unsigned值去当做实参调用如下的函数:
unsigned hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
  ++dist; 
  val &= val - 1;
  }
 
  return dist;
}

我现在的方法是,用fgets()按一行取得一个字符串,然后用strtol (p,NULL,2) 把这个字符串转换为整形数据
请问大侠们是否有更加行之有效的方法?我的意思是,是否可能不调用strtol(),直接获取文本中二进制数据,进而可以调用上面的函数去进行计算?

另,这个问题与文件的二进制模式读取有关吗?

谢谢!





作者: sushisee   发布时间: 2011-06-14

fgets是按照字符读取.
fgets以后可以用atoi直接把字符串转化为int啊

作者: dizuo   发布时间: 2011-06-14

引用 1 楼 dizuo 的回复:

fgets是按照字符读取.
fgets以后可以用atoi直接把字符串转化为int啊


我想使用atoi 和 strtol()的效率是差不多的
有什么方法可以不去进行读取字符并用函数转换吗 毕竟这么做效率比较低

作者: sushisee   发布时间: 2011-06-14

是否有什么直接读取成二进制数据的方法?

作者: sushisee   发布时间: 2011-06-14

C++中有bitset,c里面没有。

作者: dizuo   发布时间: 2011-06-14