我尝试从 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.0
。 tSP
是无符号整数值65535
;期间。
How do we convert negative uint values in double?
没有“负 uint 值”。 “u”代表无符号,这意味着负值不在该类型的值域中。
如果您希望使用 dRmSP
,则使用 dRmSP
,而不是其他具有不同类型和值的变量。
关于c++ - 将 double 转换为 uint 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176362/