二进制文件的查看、存储、读取--支持c语言、Matlab和Python

8 篇文章 0 订阅
4 篇文章 0 订阅

二进制文件的概念:
二进制数据分为大端和小段
正数按照8421编码就可以,负数按照补码的形式就行读写。
例如写入数据为int类型的 -1,
其补码为:ff ff ff ff
1+ff ff ff ff = 1 00 00 00 00
因此存储的二进制为补码 ff ff ff ff
在这里插入图片描述

1、二进制文件的查看

可以利用notepad++插件
参考: Notepad++查看二进制文件_吾易否的博客-CSDN博客_notepad++显示二进制

2、c语言版本读取

#include <iostream>
#include <fstream>
using namespace std;
void stu_wr();
void stu_red();

int main()
{
	//stu_wr();   //为二进制文件的写入
    stu_red();    //为二进制文件的读取
}
void stu_red()
{
	short int s;       
    ifstream inFile("students.dat",ios::in|ios::binary); //二进制读方式打开
    if(!inFile) {
        cout << "error" <<endl;
        return ;
    }
    cout<<"值为:"<<endl;
    while(inFile.read((char *)&s, sizeof(s))) { //一直读到文件结束
        cout <<  s << endl;   
    }
    inFile.close();
    
}
void stu_wr()
{
	    short int s;
    ofstream outFile("students.dat", ios::out | ios::binary);
    while (cin  >> s)
        outFile.write((char*)&s, sizeof(s));
    outFile.close();
    
}

2.1 如果要还需要统计该文件的字节数

比如我需要统计short int类型的数据有多少,首先shrot int为16为二进制数,占2字节。

void first_way(string in_filename)
{
	//1、先读出二进制文件有多少字节,是
	 long l, m;
    ifstream file(in_filename.c_str(), ios::in | ios::binary);
    l = file.tellg();
    file.seekg(0, ios::end);
    m = file.tellg();
    file.close();
    
    cout << "共有字节数 : " << (m - l) << " bytes.\n"; 
    
    //2、开辟内存
     int dat_size = (m-l)/2;   //这里除以是因为short int类型占2字节,如果是int类型则是4;一个文件中总共有多少个short int      //数。     
     
//    cout<<"short int类型,2字节,因此共有个数:"<<dat_size<<endl;
	//将整个二进制文件数据先存为1维的shor int 类型。 
	short int *dat_dis = new short int[dat_size];
	for(int i=0;i<dat_size;i++)
	    dat_dis[i] = 0;

    ifstream infile ( in_filename.c_str(), ios::in | ios::binary );
    if ( !infile ) {
        cerr << "open error!" << endl;
        return ; 
    }	
    for (int i = 0; i < dat_size; i++ ) {
        infile.read ( ( char* ) &dat_dis[i], sizeof (short int ) );
    }
    infile.close();
	//其中dat_dis数组就是存储的数据
	for (int i = 0; i < dat_size; i++ ) {
        cout<<dat_dis[i]<<endl;
    }
	//不要忘记释放数据
    delete []dat_dis;
}

3、Matlab

clear all;
clc
% 首先统计本文件有多少字节
D=dir('D:\Code\students.dat');
fileBytes=D.bytes;  %文件总字节数  
fileLineNum=fileBytes/2;  %除以2因为,int16类型为2字节数

data=fopen('D:\Code\students.dat','rb');
if(data>0)
    [data1,count1]=fread(data,fileLineNum,'int16');%先读取数据类型为int16的550个数值
    data2=data1();  
end 

fclose(data);

3、python版本

import struct
filename = "D:\\Code\\students.dat"  #文件名

fid = open(filename,'rb')
am = fid.read(2)
data = struct.unpack('h',am)[0]
print('二进制:')
print(am)
print('转换为short int类型')
print(data)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值