基本上,我试图通过使用fread()读取文件的二进制数据并使用printf()将其打印在屏幕上,现在问题是,当它打印出来时,它实际上不显示它作为二进制1和0但是打印符号和我不知道它们是什么的东西。
我就是这样做的:
#include <stdio.h>
#include <windows.h>
int main(){
size_t sizeForB, sizeForT;
char ForBinary[BUFSIZ], ForText[BUFSIZ];
char RFB [] = "C:\\users\\(Unknown)\\Desktop\\hi.mp4" ; // Step 1
FILE *ReadBFrom = fopen(RFB , "rb" );
if(ReadBFrom == NULL){
printf("Following File were Not found: %s", RFB);
return -1;
} else {
printf("Following File were found: %s\n", RFB); // Step 2
while(sizeForB = fread(ForBinary, 1, BUFSIZ, ReadBFrom)){ // Step 1
printf("%s", ForBinary);
}
fclose(ReadBFrom);
}
return 0;
}
如果有人能帮助我将文件的实际二进制数据读取为二进制(0,1),我将非常感激。
答案 0 :(得分:3)
while(sizeForB = fread(ForBinary, 1, BUFSIZ, ReadBFrom)){
printf("%s", ForBinary); }
这在许多层面都是错误的。首先你说它是二进制文件 - 这意味着它首先可能没有文本,你使用%s
格式说明符,用于打印空终止字符串。同样,因为这是二进制文件,并且首先可能没有文本,%s
是要使用的错误格式说明符。即使此文件中有文本,您也不确定fread
是否会读取“完整”的空终止字符串,您可以使用格式说明符printf
传递给%s
。
您可能想要做的是,从文件中读取每个字节,将其转换为二进制表示(谷歌如何将整数转换为二进制字符串,例如,here),并为每个字节打印二进制表示那个字节。
基本上是伪代码:
foreach (byte b in FileContents)
{
string s = convertToBinary(b);
println(s);
}
答案 1 :(得分:1)
How to view files in binary in the terminal?
无论
&#34; hexdump -C yourfile.bin&#34;也许,除非你想编辑它当然。大多数Linux发行版默认都有hexdump(但显然不是全部)。
或
xxd -b file
答案 2 :(得分:1)
要简单地读取文件并以二进制(1和0)打印,请一次读取char
个文件。然后,对于每个位,打印'0'
或'1'
。可以先打印大多数或最不重要的位。建议MSb。
if (ReadBFrom) {
int ch;
while ((ch = fgetc(ReadBFrom)) != EOF) {
unsigned mask = 1u << (CHAR_BIT - 1); // CHAR_BIT is typically 8
while (mask) {
putchar(mask & ch ? '1' : '0');
mask >>= 1;
}
}
fclose(ReadBFrom);
}