c - 如何在 Ascii 中进行数学运算?

标签 c arrays integer ascii

我正在尝试从 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' 来获得 charint 值,因为所有单个数字 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/

相关文章:

javascript - 使用 .find 或 .find 内部的 .index

c - 为什么我应该使用 "%d"而不是 "%i"作为 C 中整数的转换说明符?

c - 由于 C 中的 40 MB 数组而导致段错误 11

c - 缩小二维数组的大小并从中删除特定行

c - 我怎样才能得到文字的地址?

javascript - Javascript 函数的返回值(数字之和除以 3)

c - C 中的哈希算法将 16 个字节值映射到 2 个字节值

javascript - 在javascript中访问对象数组中的字段值

c++ - 归一化整数到/从 float 转换

C常用的算术转换