我想将一个
或者也许有更好的方法。我正在使用一个无符号长整型作为计时器。偶尔我读取它的当前值并将其与先前的读数(两个
我尝试了这个:
但是我刚刚遇到了编译错误:
unsigned long
的32位重新解释为signed long
。完全相同的位,只是被视为2的补码整数而不是无符号整数。我认为仅仅将其转换为long
不会奏效。我错了吗?或者也许有更好的方法。我正在使用一个无符号长整型作为计时器。偶尔我读取它的当前值并将其与先前的读数(两个
unsigned long
)进行比较,以查看经过了多长时间。我需要处理可能的溢出,这会导致当前值小于先前的值。将两个值都解释为有符号长整型并进行减法似乎可以得到正确的答案。我尝试了这个:
return reinterpret_cast<long>(time4) - reinterpret_cast<long>(currTimeLo); // treat unsigned as 2's complement
但是我刚刚遇到了编译错误:
Arduino: 1.6.7 (Mac OS X), Board: "Arduino Nano, ATmega328"
invalid cast from type 'long unsigned int' to type 'long int'
reinterpret_cast
只直接重新解释指针和引用,而不是整数值。在这种情况下,可以通过static_cast
实现重新解释,但有一个警告:g ++以利用每个小形式漏洞来绊倒实用导向的程序员而闻名。因此,您可能需要测试并搜索相关选项。在Arduino上。 - Cheers and hth. - Alf