Перевод целого в байты и обратно

Тема в разделе "Arduino & Shields", создана пользователем Михаил123, 3 сен 2020.

  1. ... то же самое
     
    Igor68 нравится это.
  2. Igor68

    Igor68 Гуру

    Смотрите тип данных:
    Код (C++):
    int32_t w = (*(int32_t*)(&buf[0]));
    //где buf:
    uint8_t buf[4]; //некий массив куда приняты данные числа
    Посмотрите что Вы не так делаете. Это всё испытано тысячи раз.
    А это точно принимаемое число типа int32_t?
     
  3. если 0, Nextion отправляет
    00 00 00 00
    если 0, Nextion отправляет
    01 00 00 00
    если -1, Nextion отправляет
    FF FF FF FF
    и далее ведёт отсчёт в обратном порядке
     
  4. то что писал ранее:
    а вот при отрицательных, например, -1, приходит из Nextion 246,255,255,255

    все фигня - это было -10
     
  5. в общем, надо ориентироваться по хвосту ff и делать "инверсию"
     
  6. Igor68

    Igor68 Гуру

    А байты приходят не задом на перед? Я не знаю кто такой Nextion
     
  7. b707

    b707 Гуру

    ну так делайте, что же вы опять ждете, что кто-то сделает за вас?
     
  8. Igor68

    Igor68 Гуру

    судя по всему 246 (0xF6) должен быть младшим байтом
     
  9. E0 FD 1C 00
    это 190 000
     
  10. это дисплей Nextion
     
  11. 30 E6 02 00
    это +190000

    D0 19 FD FF
    это -190 000
     
  12. Asper Daffy

    Asper Daffy Иксперд

    Ну, так правильно, он первым и приходит.
    Прав был Высоцкий: "Всё ухмылялась Джоконда, мол дурачок, дурачок"
     
    b707 и Igor68 нравится это.
  13. b707

    b707 Гуру

    нифига, E0 FD 1C 00 - это 1 900 000, а не 190 000.
    30 E6 02 00 - вот это 190 000

    В общем, все очень просто, слева младший байт, справа старший. сами байты не инвертированы.
    Написать преобразование чисел - вопрос пяти минут, а вы третью неделю дурью маетесь
     
  14. надо его по маске FF FF FF FF делать XOR
    верно?
     
  15. b707

    b707 Гуру

    а вычесть не проще? :)
    на самом деле, ничего делать не надо, не вычитать, ни никаких XOR

    D0 19 FD FF - это и есть -190 000, просто запишите эти байты в формате int32_t и все получится само
     
    Последнее редактирование: 20 сен 2020
  16. Igor68

    Igor68 Гуру

    Дааааа... Вы еще с приёмом int32_t и float по Modbus RTU не встречались, где передаётся всё не байтами просто так, а регистрами размерностью 16 бит каждый. И что самое важное у каждого прибора по своему расположение(последовательность) байт в регистрах(два байта на регистр). Не надо вешать хвост! Надо только сопоставить принимаемые данные с тем, что есть в байтах. И... решать задачу... спокойно и без паники.
    Данные есть! И куда они денутся с подводной лодки?!
     
    Михаил123 нравится это.
  17. b707

    b707 Гуру

    Михаил123, только что проверил код, что дал вам Igor68.
    Работает, из D0 19 FD FF - получается -190 000,

    Выходит, начиная с сообщения #34 - вы всем собеседникам просто голову дурите.
    Ищите, как всегда, пробелы в своих знаниях - раз вы даже готовый код правильно вставить в программу не можете
     
    Igor68 нравится это.
  18. абсолютно мутная фигня
    int32_t ByteToInt(uint8_t* arr)
    переделал в
    int ByteToInt(uint8_t* arr)
    и пошли в конвертации нормальные минусы
     
  19. b707

    b707 Гуру

    опять Михаилу попалась "мутная" ардуина...
    плохому танцору как всегда...

    Ставлю на то, что на самом деле было
    uint32_t ByteToInt(uint8_t* arr)

    но мы этого, конечно, уже не узнаем
     
    Последнее редактирование: 20 сен 2020
  20. b707

    b707 Гуру

    Михаил, что за плата у вас? Ардуино уно?
    ждем вас завтра с вопросом "А почему конвертация опять работает только до -32000 ?" :)))


    Ну что за бред вы все время несете - и еще имеете наглось рассказывать байки. что программист