【发布时间】:2018-03-22 18:33:59
【问题描述】:
我正在使用 Particle Photon 制作数字手表 + 闹钟。我正在使用 TFT 屏幕,我在上面绘制了一些数字,我可以使用连接到我的 Photon 的一些按钮来增加和更改“数字索引” - 目的是设置预定警报的时间。下面的函数是我在单击按钮时调用的函数,它的参数是我屏幕上“光标”所在的“数字索引”,我可以用我的按钮导航。然而,这工作正常,一直到 9 - 我的屏幕开始显示 ASCII 笑脸和其他字母而不是数字。我试着放一个 if 语句,当变量 temp 高于 9 时,它被设置为 0 - 这是我最终想要实现的。这不起作用,当超过 9 时它一直显示 ASCII 字母。然后我决定尝试在单击按钮时将 temp 打印到控制台,但是它打印的第一个字母是 49 而不是 0?什么??
我对 C/C++ 不太熟悉,但我确实有一种预感,在我增加 temp 之前,我正在从 char 数组 timeSet 进行转换错误。大家觉得呢?
void replaceDigitFromIndex(int selectorIndex) {
tft.setTextSize(4);
tft.setTextColor(ST7735_RED);
tft.setCursor(4, 20);
tft.print(timeSet);
int temp = 0;
if(selectorIndex == 1) {
temp = (int) timeSet[0];
temp++;
timeSet[0] = (char) temp;
}
if(selectorIndex == 2) {
temp = (int) timeSet[1];
temp++;
timeSet[1] = (char) temp;
}
if(selectorIndex == 3) {
temp = (int) timeSet[3];
temp++;
timeSet[3] = (char) temp;
}
if(selectorIndex == 4) {
temp = (int) timeSet[4];
temp++;
timeSet[4] = (char) temp;
}
}
【问题讨论】:
-
没有 C/C++ 语言,它们是两个独立的语言(你似乎在使用 C++,因为你有成员函数)
-
代表 0 到 9 的字符本身不具有它们所代表的值。在ASCII 中,
'0'字符的数值为 48。 -
这里的 ASCII 问题的一部分,正如其他人所指出的,我建议您阅读有关类型转换的内容。