2013-09-26 154 views
-5

我想制作一个c/C++程序来读取文件并将其打印为二进制形式作为输出。 我能够以正常文本格式打印它。以二进制形式打印文件

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
FILE *fp; 
char ch; 

if((fp=fopen("C:\\Users\\!diot\\Desktop\\21.txt","rb"))==NULL) 
{ 
    printf("\nCannot open file\n"); 
} 

fseek(fp,0,SEEK_SET); 

ch=getc(fp); 

while(!feof(fp)) 
{ 
    putchar(ch); 
    ch=getc(fp); 
} 


fclose(fp); 

return(0); 
} 

但我想打印它的二进制形式。 所以,请帮忙。

+0

为什么你需要“二元”形式? – lpapp

+0

其实我想在压缩项目上工作。 –

+0

您能否澄清一下您的需求?那么为什么不使用用C++编写的现有归档框架呢?你需要一些特殊的算法? – lpapp

回答

0

在C++中,简单地以二进制方式打开文件:

fstream fs; 
fs.open("filename.txt",ios::binary); 
+0

-1,因为读取文件的方法是完全可以接受的,并且也可以在C++中使用。作者正在以二进制模式打开文件(请参阅“rb”选项到“打开”) –

+0

@MarkLakata谢谢!我不知道 – Saksham

0

里面你while循环,你在哪里一次读取每个字符(即字节),你可以做字符的取与操作ch,所有字符从00000001到10000000.每次操作的输出都会让您知道是否设置了该特定位。你可以用它来进一步处理。

1

我假设你的意思是“二进制”,你想看到的内容为数值数据,而不是ASCII文本。更改

putchar(ch); 

printf("0x%02X ",ch); 
    { 
    static int counter=0; 
    if ((++counter) % 16 == 0) printf("\n"); 
    } 

这将显示该文件为十六进制数据。

当然,还有其他方法可以做到这一点。如果您使用Visual Studio,只需使用.bin扩展名重命名文件,然后直接用Visual Studio打开它以直接查看十六进制数据。还有很多免费的hex编辑器。

+0

+1回答这个问题,并试图直观的OP需要不清楚,虽然他们是 – john

+0

我想打印它的二进制形式,即,只有0和1(机器语言)。有没有办法做到这一点,否则我必须自己做? –

+0

某些c库支持printf的%b格式,但这不是标准格式。您可以遍历每个字节的8位,并且printf“0”或“1” –

相关问题