读取文本中的二进制数据的问题?
假设我有一个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(),直接获取文本中二进制数据,进而可以调用上面的函数去进行计算?
另,这个问题与文件的二进制模式读取有关吗?
谢谢!
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啊
fgets以后可以用atoi直接把字符串转化为int啊
作者: dizuo 发布时间: 2011-06-14
引用 1 楼 dizuo 的回复:
fgets是按照字符读取.
fgets以后可以用atoi直接把字符串转化为int啊
fgets是按照字符读取.
fgets以后可以用atoi直接把字符串转化为int啊
我想使用atoi 和 strtol()的效率是差不多的
有什么方法可以不去进行读取字符并用函数转换吗 毕竟这么做效率比较低
作者: sushisee 发布时间: 2011-06-14
是否有什么直接读取成二进制数据的方法?
作者: sushisee 发布时间: 2011-06-14
C++中有bitset,c里面没有。
作者: dizuo 发布时间: 2011-06-14