我想将输入的时间日期转换为秒。
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。有人能告诉我问题出在哪里吗?
发布于 2018-06-05 04:00:48
在大多数Arduino板上,int值是16位宽,所以如果你将3600*20
相乘,得到的数字将比65535
大得多,这是uint16_t的最大值。但是,如果你将72000 - 65536
相减,你将得到值6464
。顺便说一句:有符号整数溢出行为未由C++规范定义(它依赖于平台),但它通常作为32767
溢出到-1
,作为-32768
溢出到0
如果需要更大的值,请改用int32_t
或uint32_t
。对于常量,可以使用INT32_C(3600) * ch
或UINT32_C(3600) * ch
-如果您不想更改ch
的数据类型。
https://stackoverflow.com/questions/50687153
复制相似问题