有一种方法可以解析视图字符串ширина:долгота@ширина:долгота@...@@
并填充二维数组int[x][2]
:
void fillArr(String line, int **arr) {
line += "@@";
int x = 0;
int lng = line.length();
byte i = 0;
char char_array[lng + 1];
strcpy(char_array, line.c_str());
String str = "";
arr[0] = new int[2];
while( x < lng - 1 ){
if(char_array[x] == ':' || char_array[x] == '@') {
int num = str.toFloat() * 1000000;
str = "";
if (char_array[x] == ':') {
arr[i][0] = num;
} else {
arr[i][1] = num;
i++;
arr[i] = new int[2];
}
x++;
continue;
}
str += char_array[x++];
}
}
方法调用:
int **arr = new int *[2];
fillArr(str, arr);
但是经过几次传递(5-7 对值)后,程序崩溃了,可能是什么问题?是否有可能晶体的所有 RAM 都被阻塞了?
int num = str.toFloat() * 1000000;
- 用于截断非有效数字并仅保留有效数字
当对数达到 5-7 时,程序可以正常工作并按应有的方式填充数组。也就是说,你可以在输出中得到这样的东西:
arr[0][0] - широта 1;
arr[0][1] - долгота 1;
arr[1][0] - широта 2;
arr[1][1] - долгота 2;
arr[2][0] - широта 3;
arr[2][1] - долгота 3;
arr[3][0] - широта 4;
arr[3][1] - долгота 4;
对于传入的字符串49.46666813651794:32.06716351318357@49.47983057360329:32.08364300537107@49.46767217581145:32.106817291259745@49.45082390409025:32.11076550292967
通过执行代码:
for (int i = 0; i < 4; i++) {
Serial.print(arr[i][0]); Serial.print(" "); Serial.println(arr[i][1]);
}
我得到:
49466668 32067166
49479832 32083644
49467672 32106820
49450824 32110768
这是以不同的方式完成的。
现在我们调用该函数来获取 float[2] 类型的大小数组:
其中 line 是带有尺寸的字符串。