将 (ASCII) 字符字符串转换为浮点数 - C/C++ & Matlab
Convert (ASCII) char string to floating point - C/C++ & Matlab
我需要一些帮助将ASCII字符串转换为单个浮点数。我的数据格式如下:
iAV3e¾V3»V3AAV3AV3U¶V3AV3 =¾V3aºV3ðAV3߸害怕V3 V3e¾V3AV3U¶V3e¾V3iAV3AV3e¾V3AV3 =¾V3DAV3DAV30¶害怕V V3:害怕害怕¼V3 V3iAV3,´V3 V3·V3iAV3
每四个字符代表一个浮点数。例如:50.90101 e-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)。谢谢!
你的问题是temp_string
包含垃圾。
sprintf(temp_string,"%i", string_literal)
是错误的。%i
与字符指针不兼容,但由于sprintf
是一个可变变量函数,编译器永远不会知道您有类型不匹配。
丢掉sprintf
,试一下
const char* ptr = "...";
,然后你的循环应该工作。
或者更简单:
const float *this_reading = (float*)"...";
然后像使用数组一样使用它
当然,所有这些代码都假设数据的字节顺序与c++平台匹配。但如果你对数字运算更感兴趣,它应该"足够好"。
前10个值为
0 5.000122e-08
1 4.999939e-08
2 ?
3 5.000061e-08
4 ?
5 4.999206e-08
6 4.985647e-08
7 4.999878e-08
8 4.999573e-08
9 5.000305e-08
...
你的50.90101e-9
的例子转换为A � Z 3
在我的4字节小端进浮点C
计算机。由于Z 3
与任何第三、第四个字符(几乎)相似,它暗示您的字符串具有相同的小端浮点格式。有两个问题,把你的字符串在一个C文件。在我的C文件中,它将"ìÀV3é¾…"字符串转换为UTF8编码。用花车组织工会导致了混乱。您的字符串,如所示,肯定缺少一些字节。(我添加了一些,以通过浮动#2。)我假设真正的字符串以其原始形式存在于文件中。打开二进制文件,每次读取4个字节,命名为float
。
FILE *inf = fopen("Stringfilename", "rb");
int i = 0;
float f;
while (fread(&f, sizeof(f), 1, inf) == 1) {
printf("%d %en", i++, f);
}
fclose(inf);
printf("%d floats read.n", i);
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- MATLAB to C++: csvread() not supported by MATLAB Coder
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- MATLAB:跟踪imufilter对象中的状态变化
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 将三角函数的正确值与matlab进行比较
- 连接 MATLAB 和 Visual Studios 的问题
- 如何将C++连接到 Matlab
- 如何发送 Mat H=findHomography 返回 Matlab
- 如何在C++中编写 MATLAB fix(X) 函数?
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 有没有更好的方法可以使用特征/C++实现 matlab 的逻辑索引?
- 当我运行MEX文件时,MATLAB崩溃
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- MATLAB的imfinfo in openCV
- 将C++中的多个参数传递给MatLab共享库函数
- 将 matlab 数组(MAT-文件)转换为C++数组
- 数组数据以错误的方式遍历 Python/Matlab