c++以二进制方式读取任意文件,将读取到的二进制数一堆0,1存储到指针或者数组中

以二进制形式读取任意文件,将二进制一堆0,1,存储到某个数组中
之后将数组或指针中的1,0进行重新排列修改之后再保存到源文件

int read(FILE *fp, int ** buff)
{
    int len = 0; 
    char c; 
    while(fread(&c,1,1,fp)==1)
    {
        int i; 
        *buff = (int*)realloc(*buff, (len+8)*sizeof(int));
        for(i=0;i<8;i++)
        {
            unsigned char t = 1<<i;
            (*buff)[len+i] = c&t?1:0; 
        }
        len += 8;
    }
    return len;  
}

void write(FILE * fp, int * buff, int len)
{
    int i;
    for(i=0;i<len/8;i++)
    {
        int j;
        unsigned char c = 0;
        for(j=0;j<8;j++)
        {
            int val = i*8+j<len?buff[i*8+j]:0;
            val<<=j;
            c |= val; 
        }
        fwrite(&c, sizeof(char), 1, fp);  
    }   
}


没调试,随手打的,自己调,不行再问吧

追问

不用问了,多谢,完美解决了我的问题。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-24
文件流的形式读写。C++有专门的接口,调用就行追问

代码有没有?我给了100分了,不够我再加。。。。
就以二进制方式读一个任意格式的文件(文件里可能存了任意的东西),然后将读入的二进制数存到一个int数组里面。。。最后那个数组是一串只有0,1的数组

追答

#include
#include
#include
#include
using namespace std;
main()
{

short b=1; // 同一类型
FILE *fp;
FILE *fp2;
int i=0;
int a[1000];
fp=fopen("GTBL.dat","rb"); //文件名GTBL
while(1)
{
fread(&b,sizeof(short),1,fp);
if (feof(fp)) break; // 读后判断EOF
a[0]=b;
i++;
}
fclose(fp);
return 0;
}

追问

那啥,是a[i]=b吧?

追答

是的,我打错了是a[i]=b

C++读取二进制代码 即读出来是0和1
ofstream f("d:\\\\12.txt"); \/\/默认以 ios::out的方式打开文件 fstreamf("d:\\\\12.dat",ios::in|ios::out|ios::binary);\/\/以读写方式打开二进制文件 使用Open成员函数 fstream f;f.open("d:\\\\12.txt",ios::out);\/\/利用同一对象对多个文件进行操作时要用到open函数 检查是否成功打开 ...

用c++写文件复制,以二进制将任意文件读入,再以二进制写入
在使用C++复制文件时,以二进制方式读取源文件并以二进制方式写入目标文件是基本操作。这通常涉及使用std::fstream类。以下是一个常见操作示例:cpp \/\/ fin, fout是std::fstream的实例 char ch;while(!fin.eof()) { fin.read(&ch, sizeof(ch));fout.write(&ch, sizeof(ch));} 但是,上述...

C++如何在文件中读取数据,然后保存在一个数组中
using namespace std;void main(){ int s[5][2];ifstream fin("a.txt");int x;fin>>x;for(int i=1;i<x;i++){ for(int j=1;j<2;j++){ fin>>s[i][j];} } ofstream fout("input.txt");fout<<x;for(int k=1;k<k;k++){ for(int t=1;t<2;t++){ fout<...

C\/C++ 如何以二进制方式打开文件并以0,1方式读取写入?
如果是C语言的话,用文件操作fread和fwrite函数。可以按照字节写入和读出:FILE *fp;unsigned char buffer; \/\/字节缓存 fp = fopen("文件名", "wb");\/\/二进制写方式 while(一直读到bmp的末尾){ 这里将bmp按照字节读入buffer变量中;fwrite(&buffer, sizeof(unsigned char),1, fp);} 这样就完成...

C++中,把一串二进制数,比如111000101存在数组里,怎么做呢?
首先,一个二进制数是可以直接存在一个变量里,而不需要数组的.如果你要拆开放在数组里,那你要存0和1的数值还是存字符呢?最后一点,你要从哪边开始存呢?从高到低还是从低到高?先把变量放到一个变量里 int a = 0x01c5; \/\/1 1100 0101 int b;int index =0;char array[20];while(a){ ...

C++怎么读取文件中的几个数字在将它们储存给相应的变量
比如在exe的当前文件夹的txt文档读取内容。include<iostream> #include<fstream> using namespace std; int main() { ifstream fin("in.txt"); int a; fin>>a; cout<<a<<endl; return 0; }

c\/c++中如何采用二进制文件存储数据?
return 0;} infile.read((char * )str1.c_str(),100);\/*这儿由于不知道你上次写入文件的两个字符串的长度,只能把文件里的内容都读出来再根据'\\0'来分析出两个字符串。*\/ cout <<str1 <<endl; \/\/输出第一个字符串 cout << (char*)(str1.c_str() + strlen(str1.c_str())+1)...

C++中如何将一串二进制数字中的每一个数字单独赋值给数组?
>>表示右移,比如二进制的1000 >> 2 就变成二进制的0010 所以上面的表达式的意思是把1左移n位,然后跟i按位与,这相当于除了第n位保留原值,其他位都填0。然后把与之后的结果右移n位,相当于把第n位的值挪到第0位上。所以,取二进制的方法为:int i = 123456789;int a[32];for(int n=0...

c++读取二进制代码 即读出来是0和1 <有50财富追加,,共100>
读取文件的二进制代码有专门的函数,读文件打开用open(),读取用read(), write(),读取后记得要关闭close()

C++ 随机访问二进制数据文件的问题。。。
1:用文本文件,每个项目用特定的字符隔开,比如逗号,空格之类的 2:还是二进制保存,但是还是用一个特定的数来隔开,一般选一个不常用的数,比如0xff(255),当然这两个方案都会遇到一个问题就是你要保存的数据出现用来分割的字符或数据时要转义,类似于源代码中\\\\代表\\一样,但是要是分隔符选取得当...

相似回答