c/c++读取二进制.bin格式文件并逐个字节解析为bit

//读取二进制xxx.bin文件并逐个字节解析//2019.11.10
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

int main(int argc, char** argv)
{ 

    size_t length;
    ifstream inF;

    inF.open("data.bin", std::ifstream::binary);  //以二进制格式打开文件
    inF.seekg(0, ios::end);                       //将输入指针指向文件末尾
    length = inF.tellg();                         //获取当前指针位置
    cout << "the length of the file is " << length << " " << "byte" << endl;

    unsigned char* data = new unsigned char[length](); //读取文件数组
    inF.seekg(0, ios::beg);                            //将输入指针指向文件开头
    inF.get();
    if (!inF.eof()) {
        cout << "target reading..." << endl;
        inF.read(reinterpret_cast<char*>(data), sizeof(char)* length); //读入文件流
        cout << "finished reading" << endl;
    }
    inF.close();  //关闭文件
    
    cout << "parsing every byte..." << endl; //解析每个字节byte的bit
    
    unsigned char* data0 = new unsigned char[length]; //*****************8bit解析******************//
    unsigned char* data1 = new unsigned char[length];
    unsigned char* data2 = new unsigned char[length];
    unsigned char* data3 = new unsigned char[length];
    unsigned char* data4 = new unsigned char[length];
    unsigned char* data5 = new unsigned char[length];
    unsigned char* data6 = new unsigned char[length];
    unsigned char* data7 = new unsigned char[length];

    for (size_t i = 0; i < length; i++) {

        data0[i] = ((data[i] >> 0) & 1);  //第一位
        data1[i] = ((data[i] >> 1) & 1);  //第二位
        data2[i] = ((data[i] >> 2) & 1);  //。。。
        data3[i] = ((data[i] >> 3) & 1);  //。。。
        data4[i] = ((data[i] >> 4) & 1);  //
        data5[i] = ((data[i] >> 5) & 1);  //
        data6[i] = ((data[i] >> 6) & 1);  //
        data7[i] = ((data[i] >> 7) & 1);  //

    }
    delete[] data;
    cout << "finished parsing" << endl;

}

猜你喜欢

转载自www.cnblogs.com/buctyk/p/12682328.html
今日推荐