Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;使用“读取二进制文件”;ieee be“;机械加工 基本上我尝试把MATLAB代码转换成C++,读取二进制文件,我不知道它是什么样子。_C++_Matlab_Binary_Ieee - Fatal编程技术网

C++;使用“读取二进制文件”;ieee be“;机械加工 基本上我尝试把MATLAB代码转换成C++,读取二进制文件,我不知道它是什么样子。

C++;使用“读取二进制文件”;ieee be“;机械加工 基本上我尝试把MATLAB代码转换成C++,读取二进制文件,我不知道它是什么样子。,c++,matlab,binary,ieee,C++,Matlab,Binary,Ieee,Matlab代码简化如下: x=zeros(48,32); fid=fopen('pres_00.bin','r','ieee-be'); fseek(fid,ipos,'bof'); x(1:4:48,:)=fread(fid,[12,32],'single'); 最后,我们在x数组中基本上得到了两个数字(第1行、第5行……) 如何在C++中读取*.bin文件?我试过: file1.seekg(0, ios::end); int length = file1.tellg(); fil

Matlab代码简化如下:

x=zeros(48,32);    
fid=fopen('pres_00.bin','r','ieee-be');
fseek(fid,ipos,'bof');
x(1:4:48,:)=fread(fid,[12,32],'single');
最后,我们在x数组中基本上得到了两个数字(第1行、第5行……)

如何在C++中读取*.bin文件?我试过:

file1.seekg(0, ios::end);
int length = file1.tellg();
file1.seekg(ipos, ios_base::beg);
lenght = lenght - ipos;

char * buffer = new char[length];

file1.read(buffer, length);
double* double_values = (double*)buffer;
double test = double_values[0];
file1.close();
遗憾的是,“test”与matlab从二进制文件中编码出来的数字并不相似。如何实现IEEE编码到C++中的信息? 不幸的是,我不太熟悉二进制文件

干杯,谢谢你的帮助

//编辑:

也许这有助于: 就我而言

ipos = 0
the first hex row (offset0) (32) : 
44 7C CD 35 44 7C AD 89 44 7C E9 F2 44 7D F7 10 44 7D 9C F9 44 7B F9 E4 44 7B 3E 1D 44 7B 6C CE

ANSI: D|Í5D|.‰D|éòD}÷.D}œùD{ùäD{>.D{lÎ

First value in Matlab: 1.011206359863281e+03

What my Code reads in buffer: D|Í5D|-‰.D|éòD}÷.\x10D}œùD{ùäD{>\x1dD{lÎ......
double test = -4.6818882332480884e-262

这个问题有两个部分。首先,表示为IEEE 32位浮点;由于大多数处理器都使用IEEE浮点,因此只需简单的转换即可完成转换。但这并不是所有处理器都可以移植的。第二部分是ieee be规范中的
be
,它意味着字节被存储。由于许多处理器(如Intel/AMD)都是小端,因此在转换之前需要进行字节交换

void byteswap4(char *p)
{
    std::swap(p[0], p[3]);
    std::swap(p[1], p[2]);
}

float to_float(char *p)
{
    return *((float*)p);
}

查看实际情况:

我认为您的matlab代码读取的是“单精度”(32位),所以是浮点,而不是双精度。试着读入一个浮点数组。@johneleman这只是答案的一半,另一半是
be
可能代表big-endian,它与大多数可能使用的CPU相反。