Сегодня 256-ой день года. С днём программиста!

Тема в разделе "Флудилка", создана пользователем AlexU, 13 сен 2018.

  1. Igor68

    Igor68 Гуру

    А что это вы к sizeof доматались? пьянка в прок? или как? и нахрен мне размер... если при чтении данных не попадаешь в начальную точку данных? или я на японском или китайском разъясняю? ведь сказано: ДОСТОВЕРНО!
     
  2. Igor68

    Igor68 Гуру

    ...я достаточно выпил конечно... но ёлки палки какие биты? спрашиваю какие биты????????
    Размерность в байтах для этого случая. А линейное битовое пространство... разве что для SIM карт для таксофонов...
     
  3. SergeiL

    SergeiL Оракул Модератор

    Не, ну если общий размер всей структуры совпадает, то хотя бы понятно что и из чего что в структуре было сформировано.
    Дальше смотреть адрес начала каждого элемента.
     
  4. SergeiL

    SergeiL Оракул Модератор

    Они пропускаются. ;)
     
  5. DIYMan

    DIYMan Guest

    Есть две формы записи, короткую - вы привели, длинную - я ;)
     
  6. Igor68

    Igor68 Гуру

    Наблюдал так... что этот адрес был игнорирован при обращенни вообще...
    вот в примеру так:
    Код (C++):
    struct TTT
    {
       uint8_t a;
       uint16_t b;
    };
    struct TTT ttt;

    int addr_ttt_a = 0x00000; //образно
    int addr_tt_b = 0x00002; //тоде образно

    //если применить #pagma pack
    //для выравнивания по байту
    //то такое
    uint16_t ppp = (*(uint16_t*)(&ttt.b));
    //не прокатит... но вот это
    memcpy(&ppp, &ttt.b, sizeof(uint16_t));
    //прокатит
    И что МЫ все так корявы что бы не соблюдать хоть какие-нибудь правила для порядка? А вместо этого растопырив пальцы задирать хвост?
     
  7. SergeiL

    SergeiL Оракул Модератор

    Я посмотрел в MSDN, все правильно Вы говорите! Есть push и pop, я говорю про ANSI Си, не ++.
     
  8. Igor68

    Igor68 Гуру

    Да просто соблюдай... хоть и не писанное правило. И наплевать на компилятор если он туп или похож на Microsoft... по ходу у них свои понятия.
     
  9. parovoZZ

    parovoZZ Гуру

    не, не, не... я имею ввиду при передаче данных полей структуры. Ведь приемная сторона не ведает ничего про наши адреса, а получить должна выровненную структуру.
     
  10. SergeiL

    SergeiL Оракул Модератор

    Честно говоря не совсем понял о чем речь...
     
  11. DIYMan

    DIYMan Guest

    Чой-то мне кажется, что беседа завернула не туда: в здравом уме никому не придёт передавать структуру только на основе выравнивания, тащемта. Исключение - когда две стороны системы идентичны и по порядку следования байт, и по настройкам сборки проекта (компилятор, опции и т.п.) - и то я бы поостерёгся.

    Уже писал выше: шоб не париться, какая там архитектура, какой там LIMITS.h на приёмной стороне, и куча ещё "каких там" - юзается протокол. Простейший пример, MQTT - ему наплевать на условности: следуй протоколу, формируя/разбирая пакеты - и всё. А внутри своего кода - как хошь пакуйся.
     
    Igor68 и Mitrandir нравится это.
  12. Mitrandir

    Mitrandir Гуру

    Сделать char* и наре
    за протокол надо платить)
     
  13. SergeiL

    SergeiL Оракул Модератор

    Спорный вопрос!
    В основном протоколы описаны в документации.
    Нужно просто соблюдать правила и размеры данных!
     
  14. Mitrandir

    Mitrandir Гуру

    ну так это не делает их дешовыми
     
  15. parovoZZ

    parovoZZ Гуру

    а зачем её выравнивать в таком случае?

    она давно завернула "ай!, нетуда"
    есть куча открытых и бесплатных
     
  16. SergeiL

    SergeiL Оракул Модератор

    Похоже все отмечают "День программиста!" ;)
     
    Mitrandir нравится это.
  17. Mitrandir

    Mitrandir Гуру

    возьмем пример Игоря
    Код (C++):
    struct TTT
    {
    uint8_t   a;
    uint16_t b;
    };

    struct TTT ttt;


    //а потом:
    ttt.a = 3;
    ttt.b =254;

    //и передаём
    send(&ttt, sizeof(TTT));

    //и на приёме другого устройства с другой платформой

    struct TTT ttt;
    recv(&ttt, sizeof(TTT));

    //
    printf("a=%i\n",ttt.a);
    printf("b=%\n",ttt.b);
    и другую реализацию

    обернем вот это:
    Код (C++):
    struct TTT
    {
    uint8_t   a;
    uint16_t b;
    };
    в SOAP и сделаем 10000 передач обоими способами

    соап будет медлленнее и породит больше трафика.
    Зато нет геморроя с кросплатформенностью
     
    Igor68 нравится это.
  18. Mitrandir

    Mitrandir Гуру

    я имел в виду платить накладными расходами на реализацию/быстродействием
     
  19. SergeiL

    SergeiL Оракул Модератор

    Не совсем понял, о чем речь.
    Мы говорим о структурах в Си и о распределении памяти при использовании структур. :)
     
  20. Igor68

    Igor68 Гуру

    я имел ввиду не это:
    Код (C++):
    struct TTT
    {
    uint8_t   a;
    uint16_t b;
    };
    а это:
    Код (C++):
    struct TTT
    {
    uint16_t   b;
    uint8_t a;
    };