我想将输入的时间日期转换为秒。
case 1:
lcd.setCursor(0, 0);
lcd.print("Nastavte zacatek");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Hodina: ");
while (U == true && ch < 24) {
ch++; //ch stands for hour variable, it is integer
U = false;
lcd.setCursor(9, 1);
lcd.print(ch);
}
我正在指望:
zacatek = ((ch * 3600) + (cm * 60) + cs);
zacatek是无符号长整数,cm和cs的输入方式与ch相同(但在其他情况下)。
然后我使用Serial.println(zacatek);
在Serial上打印它
但是例如,对于时间20:0:0(ch = 20,cm = 0,cs = 0),它返回6464。
或者,对于时间19:16:0,它返回3824。
有人能说我问题在哪里吗?
答案 0 :(得分:0)
在大多数Arduino Boards上,int值为16位宽,因此如果你乘以3600*20
,你的数字将大于65535
,这是uint16_t的最大值。但是,如果您减去72000 - 65536
,您将获得价值6464
。顺便说一句:C ++规范(它依赖于平台)未定义有符号整数溢出行为,但它通常溢出为32767
到-1
和-32768
到0
< / p>
如果您需要更大的值,请改用int32_t
或uint32_t
。对于常量,可以使用INT32_C(3600) * ch
或UINT32_C(3600) * ch
- 如果您不想更改ch
的数据类型。