-2

我正在寻找允许我将浮点数转换为 HEX 字符串的内置 C 或 C++ 函数,到目前为止我已经使用过itoa,但它不适用于负值,因为它适用于无符号的 base 16,所以我想知道我可以使用哪一个来处理负值。

使用 itoa 我失去了我的负值,如下所示,

Acceleration X: -9 | X angle: **-0.5156689167**
Acceleration Y: -69 | Y angle: **-3.9565520286**
Acceleration Z: 986 | Z angle: 80.4013519287
Value of ACC per axe (x,y,z) in HEX ->ffcdfe751f68
Data to be send x ->**ffcd**
Data to be send y ->**fe75**
Data to be send z ->1f68

我还可以使用哪些其他功能来实现相同的功能?

4

1 回答 1

1

查看您提供的结果,我会说它们是正确的。你得到了二进制补码值:

ffcd = -51 in 16-Bit binary complement
fe75 = -395 in 16-Bit binary complement
1f68 = 8040 in 16-Bit binary complement

将它除以 100,就得到了(四舍五入的)浮点值。

atoi 可以处理负值。它通过将二进制表示的最高值位设置为 1 来指示否定状态。如果您确实期望一个,您将不会得到 - 符号。

您可以通过将(16 位)十六进制值转换为十进制并从结果中减去 65536 来自行计算二进制补码。

例如

ffcd -dec-> 65485 -sub-> 65485 - 65536 = -51 -float-> -51 / 100.0 = - 0.51
于 2016-04-07T10:20:59.383 回答