我需要一些帮助将 ASCII 字符串转换为单个浮点数。我的数据具有以下格式:
ìÀV3é¾V3»V3AÀV3ÁV3Û¶V3ÅV3=¾V3âºV3ðÂV3߸V3¿V3é¾V3ÁV3Û¶V3é¾V3ìÀV3ÁV3é¾V3ÁV3=¾V3DÂV3DÂV30¶V¿V3:¼V3¿V3ìÀV3,´V3¿V3·V3ì
每四个字符应代表一个浮点数。例如:50.90101e-9;
我正在尝试使用以下 C++ 代码将此字符串转换为可读数据
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
int main (void)
{
int i;
int no_of_bytes;
char temp_string[2048];
float this_reading[100];
char *ptr;
no_of_bytes=32;
sprintf(temp_string,"%i",no_of_bytes*4);
/*convert char string to floating point*/
sprintf(temp_string,"%i","ìÀV3é¾V3»V3AÀV3ÁV3Û¶V3ÅV3=¾V3âºV3ðÂV3߸V3¿V3é¾V3ÁV3Û¶V3é¾V3ìÀV3ÁV3é¾V3ÁV3=¾V3DÂV3DÂV30¶V¿V3:¼V3¿V3ìÀV3,´V3¿V3·V3ìÀV3");
ptr=&temp_string [1];
/*convert char string to floating point*/
for(i=0; i<no_of_bytes; i++)
{
//puts(ptr);
this_reading [i] = *((float*)ptr);
ptr = ptr+4;
printf ("%e \n", this_reading [i]);
}
}
/*end of main*/
但我得到以下结果:
6.665629e-10
-6.321715e-30
4.056162e-02
-5.629500e+14
1.259217e-18
1.779649e-43
3.087247e+23
2.350968e-38
-2.437012e+01
9.439035e-38
0.000000e+00
-2.000000e+00
-nan
1.661560e+35
4.056162e-02
-5.629500e+14
1.259217e-18
1.779649e-43
3.096102e+23
2.350968e-38
-2.437012e+01
1.628646e+32
0.000000e+00
6.490371e+32
0.000000e+00
0.000000e+00
2.596148e+33
0.000000e+00
1.038459e+34
4.153837e+34
0.000000e+00
0.000000e+00
我尝试取一个浮点数,接近我要转换的值,将其转换为字符并使用相同的方法返回浮点数,结果中也出现相同的错误:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
int main (void)
{
float reading;
float number;
char *ptr;
float *pointer_number;
char temp_char ;
number = 50.90101e-9;
pointer_number = & number;
printf ("%e \n",*pointer_number);
temp_char = *((char*)pointer_number);
printf ("%c \n",temp_char);
ptr=&temp_char ;
puts(ptr);
reading = *((float*)ptr);
printf ("%f \n", reading);
}
/*end of main*/
.
5.090101e-08
A
AA�Z3
22272396874481664.000000
我不是 C/C++ 数据声明和操作方面的专家。我的最终目的是在 Matlab 中进行这种转换。我正在从一个非常古老的仪器中读取这个值。他们在仪器手册中指定查询数据支持两种使用 IEEE 浮点算术标准(ANSI/IEEE Std. 754-1985)的数据类型。
谢谢!