c++ - 将 double 转换为 uint 并返回

标签 c++

我尝试从 modbus 转换一个值。 设备显示“-1.0”,返回值为 65535 (uint16)。 我现在尝试将此值 retour 转换为双倍。 我用不同的 Actor 试过。 它总是给我 65353.00 :(

我们如何将负 uint 值转换为 double?

typedef unsigned short uint16;

int main() {

double dRmSP = -1.0;                       //-1.0000   ok
uint16 tSP = static_cast<uint16>(dRmSP);   // = 65535   ok

// retour
double _dRmSP = static_cast<double>(tSP);  // = 65535.0000  why??

// try
double _dRmSP_ = static_cast<double>(static_cast<int>(tSP));    // =65535.0000  why??

return 0;
}

最佳答案

您正在使用 uint16 值 65535 并将其转换为 double。这是 65535.0。
没有其他有效的期望。

变量 tSP 不会“记住”它的值最初来自 double-1.0tSP 是无符号整数值65535;期间。

How do we convert negative uint values in double?

没有“负 uint 值”。 “u”代表无符号,这意味着负值不在该类型的值域中。

如果您希望使用 dRmSP,则使用 dRmSP,而不是其他具有不同类型和值的变量。

关于c++ - 将 double 转换为 uint 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176362/

相关文章:

c++ - 尝试从文本文件打印名字,但同时获取名字和中间名

c++ - 是否有任何 FOSS 工具可以从现有的 C++ 代码可靠地创建 UML 模型?

c++ - 如何在 MPI 部分之外处理 IO 等

c++ - 什么时候为类定义 ostream 运算符 <<?

c++ - 未调用 ReadFileEx() 完成例程

c++ - 具有自己成员的成员 Vector 的类

c++ - 位移位的目的是什么?

c++ 我应该使用前向声明吗?

c++ - 内核授权文件操作范围在 Mavericks 中被破坏

c++ - CArray 内存泄漏