讀取二進位制檔案到txt,包括大小端轉換
不多說,直接上程式碼
#include<stdio.h>
#include<stdlib.h>
#include<fstream>
#include <iomanip>
#include <vector>
#include<math.h>
using namespace std;
#define L 101
#define M 102
#define N 103
void OnChange(float InParam, float &OutParam)
{
union
{
char ch[4];
float iTemp;
}u,r;
u.iTemp = InParam;
r.ch[0] = u.ch[3];
r.ch[1] = u.ch[2];
r.ch[2] = u.ch[1];
r.ch[3] = u.ch[0];
OutParam = r.iTemp;
}
int main()
{
ofstream outfile("faultLabel.txt");
FILE *fp;
fp=fopen("faultLabel.dat","rb");
float ***v;
v=(float***)malloc(N*sizeof(float**));
for (int i=0;i<N;i++){
v[i]=(float**)malloc(M*sizeof(float*));//分配空間,每個二級指標又指向m個一級指標
for (int ii=0;ii<M;ii++){
v[i][ii]=(float*)malloc(L*sizeof(float));//分配空間,每個一級指標指向長度為l的一維陣列
for ( int iii=0;iii<L;iii++){
v[i][ii][iii]=0;
fread(&v[i][ii][iii],4,1,fp);//讀二進位制速度檔案
float temp;
temp=0;
OnChange(v[i][ii][iii],temp);
outfile<<setiosflags(ios::fixed)<<setw(5)<<temp<<" ";
}
outfile<<endl;
}
}
fclose(fp);
return 0;
}
對於其他型別只需要修改對應的union型別就可以了,具體實現如下:
void OnChange(short InParam, short &OutParam)
{
union
{
char ch[2];
unsigned short iTemp;
}u,r;
u.iTemp = InParam;
r.ch[0] = u.ch[1];
r.ch[1] = u.ch[0];
OutParam = r.iTemp;
}
void OnChange(int InParam, int &OutParam)
{
union
{
char ch[4];
int iTemp;
}u,r;
u.iTemp = InParam;
r.ch[0] = u.ch[3];
r.ch[1] = u.ch[2];
r.ch[2] = u.ch[1];
r.ch[3] = u.ch[0];
OutParam = r.iTemp;
}
void OnChange(float InParam, float &OutParam)
{
union
{
char ch[4];
float iTemp;
}u,r;
u.iTemp = InParam;
r.ch[0] = u.ch[3];
r.ch[1] = u.ch[2];
r.ch[2] = u.ch[1];
r.ch[3] = u.ch[0];
OutParam = r.iTemp;
}
void OnChange(double InParam, double &OutParam)
{
union
{
char ch[8];
double iTemp;
}u,r;
u.iTemp = InParam;
r.ch[0] = u.ch[7];
r.ch[1] = u.ch[6];
r.ch[2] = u.ch[5];
r.ch[3] = u.ch[4];
r.ch[4] = u.ch[3];
r.ch[5] = u.ch[2];
r.ch[6] = u.ch[1];
r.ch[7] = u.ch[0];
OutParam = r.iTemp;
}