二进制文件的概念:
二进制数据分为大端和小段
正数按照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)