C 将字符串转换为double或float以执行数学公式
我有一个函数,我正试图从PHP转换。我正在执行类似以下示例的函数:C 将字符串转换为double或float以执行数学公式,c,string,floating-point,type-conversion,double,C,String,Floating Point,Type Conversion,Double,我有一个函数,我正试图从PHP转换。我正在执行类似以下示例的函数: latlong_hex("1234.5678N"); 我需要处理结果,但是我遇到了字符串到双精度转换和计算的问题。转换后,我将丢失小数点后的所有数字。底部的十六进制函数工作正常 int latlong_hex(char* gps_coord) { int gps_result; char direction[2] = {0}; char gps_latlong[10] = {0}; double
latlong_hex("1234.5678N");
我需要处理结果,但是我遇到了字符串到双精度转换和计算的问题。转换后,我将丢失小数点后的所有数字。底部的十六进制函数工作正常
int latlong_hex(char* gps_coord)
{
int gps_result;
char direction[2] = {0};
char gps_latlong[10] = {0};
double latdeg;
double tempDec;
char* tempGPS;
strncpy(gps_latlong, gps_coord, 9);
strncpy(direction, gps_coord+9, 1);
tempDec = strtod(gps_latlong, NULL);
free(gps_latlong);
tempDec = tempDec / 100;
if(direction == 'W' || direction == 'S')latdeg = round((floor(tempDec)+((tempDec - floor(tempDec))/60),7))*-1;
else latdeg = round((floor(tempDec) + ((tempDec - floor(tempDec))/60),7));
if(latdeg > 0){
gps_result = latdeg / 0.0000001;
}
else{
gps_result = (4294967295 + (latdeg/0.0000001)) ;
}
dec_hex(gps_result);
return 1;
}
这:
是即时未定义的行为,因为gps\u latlong
不是堆分配的对象。拆下那条线
另外,您应该直接在gps\u-coord
上调用strod()
,本地复制没有任何作用。这:
是即时未定义的行为,因为gps\u latlong
不是堆分配的对象。拆下那条线
另外,您应该直接在
gps\u-coord
上调用strotd()
,本地复制没有任何作用。gps\u-latlong正在从字符串中提取包含不需要的字母的数字。@Eddie但是strotd()
不会在意,如果您给它“1.2FOO”它将找到1.2
,并在F
处停止。当您仍要将字符串交给strod()
时,在字符串周围进行杂耍是没有意义的。事实上,请查找第二个参数(您设置为NULL
)的用法。gps\u latlong正在从包含不需要的字母的字符串中提取数字。@Eddie但是strod()
不会在意,如果您给它“1.2FOO”,它将找到1.2
,并停在F
。当您仍要将字符串交给strod()
时,在字符串周围进行杂耍是没有意义的。事实上,请查找第二个参数(您已设置为NULL
)的用法。什么是gps\u结果
?它没有在代码中的任何地方声明。我的水晶球告诉我它被声明为intgps\u结果
。即使您认为它工作正常,也请向我们展示dec\u hex
。strncpy(gps\u latlong,gps\u coord,9);strncpy(方向,gps坐标+9,1)代码>----->char direction=gps_coord[9];strncpy(gps_latlong,gps_coord,8)代码>什么是gps\U结果
?它没有在代码中的任何地方声明。我的水晶球告诉我它被声明为intgps\u结果
。即使您认为它工作正常,也请向我们展示dec\u hex
。strncpy(gps\u latlong,gps\u coord,9);strncpy(方向,gps坐标+9,1)代码>----->char direction=gps_coord[9];strncpy(gps_latlong,gps_coord,8)代码>
free(gps_latlong);