我正在尝试从 GPS NMEA 数据包中解析纬度、经度值。我收到的数据包是一个字符数组。我解析了纬度数组,现在我需要对其进行乘法运算。但它是一个字符数组。例如,这是一个示例数组:
char *latitude;
latitude[0] = '4';
latitude[1] = '0';
latitude[2] = '5';
我想将这个值乘以 2。它必须分别输出 8,0,10。所以我需要将 4、2、6 值作为整数获取。但是,如果我将此数组内容用作整数,它自然会输出 52、48、53。我不想得到对应这些 ascii 字符的整数值,我想得到我看到的实际值。
最佳答案
首先,您必须确保数字是个位数或者您已进行适当处理。请注意,由于整数提升,char
可以用作整数而无需显式转换。例如,如果
latitude[0] = '1';
latitude[1] = '3';
latitude[2] = '9';
你必须分别传递这些,然后将它们放在一起。您可以通过减去 '0'
来获得 char
的 int
值,因为所有单个数字 int
值都是 ascii是相互顺序的。为此,编写如下函数:
int asciiToInt (char ascii) {
if ( ascii < '0' || ascii > '9' ) {
return -1; //error
}
else
{
return (int)(ascii - '0'); // This works because '0' has the int value 48 in Ascii and '1' 49 and so on.
}
}
然后这样调用
int a = asciiToInt(latitude[0])*2;
或者,如果你想要一个 3 位数字
int a;
a = asciiToInt(latitude[0]);
a += asciiToInt(latitude[1])*10;
a += asciiToInt(latitude[2])*100;
a = a*2;
关于c - 如何在 Ascii 中进行数学运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34716842/