c++ - 将 unsigned long long int 转换为 signed long long int 可能吗?

标签 c++ c embedded

来自传感器的数据有两种格式SaHpiUint64TSaHpiInt64T,应用程序设计为仅处理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)));

最佳答案

是的,这是可能的。你甚至不需要类型转换。只需将您的 long long int 分配给 unsigned long long int 变量即可。

但是,long long int 当然可以包含负值。如果您的 long long int 传感器读数永远不会为负,则没有问题。如果它们可以是负数,则这些负值将在转换为 unsigned long long int 时变成大的正数。你如何处理它,如果你处理它,这取决于你。

如果您知道传感器可以产生负值,那么添加一个偏移量以便偏移值始终为非负值会更有意义。两个选择是最小可能的传感器读数和最小 unsigned long long int。使用这种偏移方法,在最大可能的有符号值处不再存在不连续性。

关于c++ - 将 unsigned long long int 转换为 signed long long int 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21015665/

相关文章:

c++ - 延迟 MSAA 伪造

c++ - 无法将 'QJsonObject' 转换为 'int' 作为返回

C - 在word中搜索一个字母

c++ - 如何在包装函数调用序列中正确使用 va_list?

c++ - 忽略内存消耗,使用 `int` 或 `char` 会有所不同吗?

c - C 中的 Break 命令无法正常工作?

c - 分析C中的快速排序

embedded - 硬件上的高频交易策略编码

macos - 如何让 Mac 使用 USBasp 检测 AVR 板并烧录程序到它?

c++ - 为什么 std::swap 不适用于地址运算符?