读取二进制文件部分内容

    #include <stdio.h>
#include <stdlib.h>
#define max_len 68760*16
#define max_float_len 68760*4
/**************************************
total:12103523
channel1:0xE1:68760
channel2:0xE3:68760
channel3:0xE5:68760
channel4:0xE7:68760
channel5:0xEF:68760
channel6:0xE9:68760
channel7:0xEB:68760
channel8:0xED:68760
**************************************/
typedef union
{
    float fdata;
    unsigned long ldata;
}floatlongType;

void Byte_to_Float(float* f,unsigned char byte[])
{
    floatlongType fl;
    fl.ldata=0;
    fl.ldata=byte[3];
    fl.ldata=(fl.ldata<<8)|byte[2];
    fl.ldata=(fl.ldata<<8)|byte[1];
    fl.ldata=(fl.ldata<<8)|byte[0];
    *f=fl.fdata;
}

//int main()
//{
//    unsigned char byte[4]={0x69,0xA0,0x06,0xBF};
//    float f;
//    Byte_to_Float(&f,byte);
//    printf("%f",f);
//    return 0;
//}

int main()
{
    FILE * fp;
    FILE* out;
    unsigned char * pbuf;
    long fsize = 0;
    int i = 0;
    int j = 0;
    int tmp = 0;
//    int newline = 0;
    unsigned char byte[4] = {0};
    float float_array[max_float_len] = {0};
    int package_num = 0;
    unsigned char* result_buf;
     result_buf = (unsigned char*)malloc(max_len);
    //printf("argc = %d, filename = %s\n", argc, argv[1]);

    fp = fopen("C:/Temp/eeg_record.bin", "rb");
    if(!fp)
    {
        perror("error ");
        return 2;
    }
    fseek(fp, 0, SEEK_END);
    fsize = ftell(fp);
//    printf("%d\n",fsize);
    fseek(fp, 0, SEEK_SET);
    pbuf = (unsigned char *)malloc(fsize);
    if(NULL == pbuf)
    {
        printf("malloc failed!\n");
        return 3;
    }
    fread(pbuf, 1, fsize, fp);
    while(i < fsize)
    {
        if((!(pbuf[i]^0xFA))&&(!(pbuf[i+1]^0x55))&&(!(pbuf[i+2]^0xAA))&&(!(pbuf[i+3]^0xE1)))
        {
            for(j=0;j<16;j++)
            {
                result_buf[tmp+j] = pbuf[i+j+5];
//                printf("%3.2x\n",result_buf[tmp+j]);
            }
            tmp = tmp + 16;

            package_num++;
        }

//        printf("%3.2x", pbuf[i]);
//        i++;
        i++;
//        if(++newline == 16)
//        {
//            printf("\n");
//            newline = 0;
//        }
    }
    printf("package_num:%d\n",package_num);
    i=0;
    j=0;
    while(i<max_len)
    {
        byte[0] = result_buf[i++];
        byte[1] = result_buf[i++];
        byte[2] = result_buf[i++];
        byte[3] = result_buf[i++];
        Byte_to_Float(&float_array[j],byte);
        //printf("%f\n",float_array[j]);
        j++;
    }
    out = fopen("C:/Temp/output.bin","wb");
//    fwrite(result_buf,1,max_len,out);
//    fwrite(float_array,4,max_float_len,out);
    for(i=0;i<max_float_len;i++)
    {
        fprintf(out,"%f%c",float_array[i],'\n');
    }
    printf("Over\n");
    free(pbuf);
    fclose(fp);
    fclose(out);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_34121068/article/details/79930159