来自传感器的数据有2种格式 SaHpiUint64T 和 SaHpiInt64T ,应用程序只能处理 SaHpiUint64T 数据。
如果可能的话,施放会产生什么副作用?
/* unsigned 64-bit data, 8-byte alignment */
typedef unsigned long long int SaHpiUint64T __attribute__((__aligned__(8)));
/* signed 64-bit data, 8-byte alignment */
typedef signed long long int SaHpiInt64T __attribute__((__aligned__(8)));
答案 0 :(得分:3)
是的,这是可能的。你甚至不需要演员。只需将long long int
分配给unsigned long long int
变量。
但是,long long int
当然可以包含负值。如果您的long long int
传感器读数从不为负数,则没有问题。如果它们可能是负数,那么在转换为unsigned long long int
时,这些负值将变为大的正数。你如何处理这个问题,如果你处理它,那取决于你。
如果您知道传感器可以产生负值,则添加偏移更有意义,以便偏移值始终为非负值。两种选择是最小可能的传感器读数和最小unsigned long long int
。使用这种偏移方法,在最大可能的有符号值上不再存在不连续性。
答案 1 :(得分:0)
当然你可以施放它们,但你可能会完全错误地解释你的数据:D
整数变量的最后一位(最高值)是有符号int的情况下变量的符号。
现在,如果您感知有符号值,并且感知到负变量,并将其转换为无符号变量,则最终会得到一个非常大的数字(2 ^ 63 + abs(原始变量))在这种情况下。
如果您以无符号形式感知,并且感知到大于2 ^ 63的值,并将其转换为带符号的int,则最终将得到等于(原始值 - 2 ^ 63)的值,是负值。
因此,如果您确定感官数据的范围,那么您可以安全地在两者之间施放,否则不会。