首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二进制数据提取有关问题

2012-03-06 
二进制数据提取问题有大量的如下二进制数据文件:1001110101101010010101010100101001000111...现在要做的

二进制数据提取问题
有大量的如下二进制数据文件:
10011101
01101010
01010101
01001010
01000111
...
现在要做的是删除其中的某一列数据(提取其中的某些烈),剩下的重新组成新的二进制文件。譬如删除第八列,则剩下的内容为1001110011010101010100100011...请问如何实现?

[解决办法]
如果需要保留原来文件的 分行格式:
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp=fopen( "test.txt ", "r ");
FILE *tmp=fopen( "tmp.txt ", "w ");
int index=0, c;
while((c=fgetc(fp)) != EOF)
{
if(c== '\n ')index=0,fputc(c, tmp); //这里把 回车符号写回文件即可
else
{
index++;
if(index != 8)fputc(c, tmp);
}
}
fclose(fp);
fclose(tmp);
system( "PAUSE ");
return 0;
}

/*
test.txt内容:
10011101
01101010
01010101
01001010
01000111

结果文件 tmp.txt 内容:
1001110
0110101
0101010
0100101
0100011
*/
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fsrc;
FILE *fdes;
if ((fsrc=fopen( "sourcedata ", "rb "))==NULL)
{
printf( "can not open file sourcedata.\n ");
exit(0);
}
if ((fdes=fopen( "dest ", "wb "))==NULL)
{
printf( "can not open write-to file.\n ");
exit(0);
}
char cha,chb;
short index=0;
unsigned char chtail=255;
unsigned char chhead=128;
cha=fgetc(fsrc);
///printf( "%c\n ",cha);
while (!feof(fsrc))
{
chb=fgetc(fsrc);
///printf( "%c\n ",chb);
index++;
chtail < <=1;
cha=cha&chtail;
unsigned char temp=chb&chhead;
temp> > =(8-index);
cha=cha|temp;
fputc(cha,fdes);
printf( "%c\n ",cha);
chb < <=index;
cha=chb;
chhead=chhead|chhead> > 1;

if (index==7)
{
index=0;
cha=fgetc(fsrc);
chtail=255;
chhead=128;
}
}
fclose(fsrc);
fclose(fdes);
return 0;
}

这个仅仅能删除第八列
[解决办法]
char buff[8];
short int * p;
int i;
while( fread(buff, 1, 8, fin) == 8 ){
for(i = 1; i < 8; i ++){
p = (short int *)&buff[i];
buff[i] > > = i;
*p < <= i;
}
fwrite(buff, 1, 7, fout);
}
只限首尾两列

热点排行