Неправильное преобразование полезной нагрузки Arduino - PullRequest
0 голосов
/ 23 октября 2019

Здравствуйте, я новичок в 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 hex, но мой println показывает 106. Почему не конвертирует это правильно? Эта проблема возникает из-за предыдущей ошибки?

Ниже я показываю схему того, что я делаю. Это из этой ссылки .

enter image description here

Большое спасибо!

1 Ответ

1 голос
/ 23 октября 2019

Проблема в том, что первый println теоретически должен показывать 1791234567, потому что я просто умножаю 179.1234567 x 10000000, но он показывает 1791234560. Почему появляется этот 0? Где находится 7?

Это, вероятно, из-за пределов точности float. Вместо этого попробуйте double.

Вторая проблема заключается в том, что полезная нагрузка [0] должна быть шестнадцатеричной в 6А, но мой println показывает 106.

Вы можете указать формат для println () , вот так:

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