从 char 到 int 的转换会做一些奇怪的事情
Conversion from char to int does something weird
我与粒子光子合作制作数字手表+闹钟。我正在使用TFT屏幕,并在其上绘制了一些数字,我可以使用连接到光子的一些按钮来增加和更改"数字索引" - 目的是设置预定闹钟的时间。下面的函数是我点击按钮时调用的函数,它的参数是屏幕上"光标"所在的"数字索引",我可以用我的按钮导航。然而,这工作正常,一直到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;
}
}
字符'0'
-'9'
是 ASCII 字符 48-57*。
如果你想添加一个并让它们循环,你可以这样做:
//conversion to int is implicit, no need for (int)
int temp = timeSet[i] - '0'; //Subtract char '0' to map to ints [0,9]
temp = (temp + 1) % 10; //loop around 10
timeSet[i] = temp + '0'; //Add back char '0' to map back to chars ['0', '9']
*至少对你来说(因为你已经告诉我们'1'
输出 48,所以你必须使用 ASCII 或 ASCII 的某个超集,如 UTF-8),但不能保证每个编译器都会像这样。这和可读性是我在代码中- '0'
的原因。数字字符始终是连续的。谢谢@Pete!
在 ASCII 中,只有单个字符的表示形式,特别是对于仅表示从 0(字符 48)到 9(字符 57)的数字。 当你超过9时,你会得到字符'9'+1,即':"。 当 int 超过 9 时放置一个 if 语句是正确的。 但请确保 if 在 int 上而不是字符上。
相关文章:
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- C ++如何在使用"tolower"时将char转换为int
- C++ (U256)*(H256 const*)(char*[] + int) 将重写转换为 Java
- char*(int)在C 中是什么意思
- 是否可以<char> <int> 在 C++ 中将 std::list 转换为 std::list
- Qt5 对'QApplication::QApplication(int&, char**, int)'的未定义引用
- 没有运算符"="匹配这些操作数操作数操作数类型为 std::basic_ostream<char、std::char_traits<char>> = int
- 编程语言中的 char-int 等价性
- C++。为什么 std::cout << char + int 打印 int 值?
- 关于运行良好的堆栈RPN程序上的char/int
- 在 C# 中从 char int 直接转换为 char
- 从文本文件中提取特定值(char & int)并插入到多个变量中C++
- 编译错误 - 数组下标'char[int]'的类型无效
- 从“char*”到“char”[-fpermissive]的转换无效,数组下标的类型“char[int]”无效
- 如何在文件中读取,其中包含char, int和空白到链表
- 如何在我的程序中查找"const char* + int"表达式
- While loop and cin char, int
- 如何将输入作为字符串,并将每个字符标识为char, int或float
- 如何正确使用char[int]