首页 > 解决方案 > 错误的有效载荷转换Arduino

问题描述

您好,我是 arduino 的新手,也许是一个愚蠢的问题,但我正在尝试将long数字转换为byte.

我的代码是:

float f_longitud = 179.1234567;
byte payload[4];

long longitud= f_longitud * 10000000;
SerialUSB.println(longitud);

payload[0] = (byte) ((longitud & 0xFF000000) >> 24 );
payload[1] = (byte) ((longitud & 0x00FF0000) >> 16 );
payload[2] = (byte) ((longitud & 0x0000FF00) >> 8 );
payload[3] = (byte) ((longitud & 0X000000FF));
SerialUSB.println(payload[0]);

问题是第一个println理论上必须显示1791234567,因为我只是在乘法179.1234567 x 10000000,但它显示了1791234560。为什么会出现这个 0?7号在哪里?

第二个问题是payload[0]应该是6A十六进制的,但我的println显示是106. 为什么转换不正确?这个问题是因为之前的错误而出现的吗?

下面我展示了我正在做的事情。它来自这个链接

在此处输入图像描述

非常感谢!

标签: arduinopayload

解决方案


问题是第一个 println 理论上必须显示 1791234567,因为我只是乘以 179.1234567 x 10000000 但它显示 1791234560。为什么会出现这个 0?7号在哪里?

这可能是由于float. 试试double吧。

第二个问题是 payload[0] 应该是 6A hex,但是我的 println 显示的是 106。

您可以为println()提供格式,如下所示:

SerialUSB.println(payload[0], HEX);

推荐阅读