linux c语言 把一个文件用二进制方式打开,给一个二进制数串向文件中匹配

作者&投稿:柯瑾 (若有异议请与网页底部的电邮联系)
C语言。 我想读取一个文件,将此文件以二进制方式读入,并把这个二进制串转换为字符的二进制表示,比如~

读取入unsigned char* buffer
长度 int len
结果 char res[len*8]

int k=0;
for( i=0,i<len;i++){
b=buffer[i];
for(j=0;j>7;j++){
//输出
b<<=j;

res[k++]=(b>>7)==1?'1':'0';

}
}

原理是位运算

b=abcdefgh
b<<=j 把第j位顶到最高位并去掉第0到j-1位 若j=4,结果efgh0000
>>7 把第j位放入最低位并去掉第j+1到7位,结果是第j位0或者1 结果0000000e

文件以二进制方式打开,如果文件中存在二进制的0x00,就不能用fgetc()这样的函数去读取文件!fgetc只能处理文本的!同样的也不能用fputs()写二进制数据!只能用fread和fwrite来读文件和写文件!

二进制是按照字节匹配还是按照位匹配?
即是不是有可能从某个字节中间匹配?
比如
10100100 11001100
给定的如果是 00100110
如果按字节匹配就是没有匹配的,如果按位就可以匹配上。
这个直接影响代码,先得确定下。


麻章区18419444548: 在linux下,写一个c语言程序把一个文件的内容写入另一个文件中 -
徒春地榆: #include<stdio.h>main(){ FILE *fi,*fo; char c; fi=fopen("input","r"); fo=fopen("output","w"); while(fscanf(fi,"%c",&c)!=EOF) fprintf(fo,"%c",c); fclose(fi); fclose(fo);}

麻章区18419444548: 用C语言打开文本文件,然后以二进制保存 -
徒春地榆: 我给你段代码:(带注释)包括了读文件和写文件的操作过程#include "stdafx.h"//若为工程则必须,若为单纯的一个cpp文件没必要#include <stdio.h>#include <stdlib.h>#define NameNum 15//名字的最大长度#define N 2//这里的数可以改,意思...

麻章区18419444548: 在linux下,怎样用c语言按行读取二进制文件,并写入到另一个文件中 -
徒春地榆: 二进制文件分行吗?文本文件吧?你查一下fgets的api吧~有事查api自己钻研才有趣.http://man.chinaunix.net/develop/c&c++/linux_c/default.htm

麻章区18419444548: 在linux c编程中,怎样判断该文件为二进制文件?用纯c来判断! -
徒春地榆: 这个基本上没办法,因为二进制文件和文本文件在电脑里的保存方式是一样的,只不过读取方式不同而已.单纯看文件是看不出来种类的.

麻章区18419444548: 【Linux C编程】编写程序p2,当执行命令“p2 file1 file2”,实现复制文件file1成file2 -
徒春地榆: #include int main (int argc, char* argv[]) { if ( argc != 3 ) { printf ("Wrong arguments.\nUsage: argv[0] srcfile desfile\n"); return 1; } system ("cp argv[1] argv[2]"); return 0; }

麻章区18419444548: 怎样用C语言将文件复制另外的文件夹 -
徒春地榆: 只帮你解决路径问题 ,剩下的自己做功课查资料去 #include #include #include int main() { int len1; int len2; int i; char filedir[1024] = "D:\\xyz\\abc\\"; char filename[32]; char fileextend[8] = ".txt"; len1 = strlen(filedir); for(i=5;i<=100;i+=5) { sprintf(...

麻章区18419444548: linux c语言下引用其他文件的函数问题 -
徒春地榆: 假如你不把b.c编译进去的话就需要通过extern 来申明,你编译进去的话编译器就将这两个c文件都连接在一起了.而且gcc -o 其中就包括了预定义,编译 ,汇编,链接过程了, 也就是说你想在一个C语言的文件中运用其他的C文件的函数有两种方式:1 将你涉及到的C文件一起编译进去.但是这里面只能有一个C文件中有main函数.2. 假如不想将其他的C文件编译进去的话,那就像你说的把C文件的函数通过extern进行申明就可以了.

麻章区18419444548: C语言如何在.c文件中调用另一个.c文件中的字符数组(2个.c文件不在同一文件夹) -
徒春地榆: 在b.c中声明 extern char* x;然后,如果你是使用的VC,那么把a.c和b.c都加到同一个工程里面就可以了如果你是在linux下面,那么把a.c和b.c编译出来的.o文件在链接的时候链接在一起就可以了

麻章区18419444548: 用linux c语言编写 为一个文件里面的内容的每一行添加一个指定的字符 -
徒春地榆: 1、基本思路:从第一个文本文件中用 fgets() 函数读出一行数据,对读出的每一行数据进行判断,如果需要在它的适当位置插入一行,把相应的新内容、以及该行的内容写到第二个文本文件中.如果不需要在该位置插入一行,那就直接将该行数据用 fprintf() 函数写入第二个文本文件中.2、伪代码:1.打开要修改的文件A,2.创建一个临时文件B,3. while(没到达文件A末尾) 从A中读取一行,写到B中,然后写入要追加的内容,写入换行符4.关闭文件A,关闭文件B,5.删除文件A(用remove函数),重命名B为A(用rename函数)

麻章区18419444548: 在linux下,新建a.txt文件,用c语言先将字符串”abcde“和”fghij“分别写入第二行和第三行, -
徒春地榆: #include <stdio.h> #include <stdlib.h> int main() {FILE *fp;fp=fopen("a.txt","w+");char* m;//用来指向后来插入的第一行的字符串的指针if(fp!=NULL)printf("打开成功\n");char* p="\nabcde\nfghij";if(EOF==fputs(p,fp)){printf("写...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网