История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
uint8_t* name;
Сработает то что ты хочешь, только в случае если name
не будет указателем, а будет массивом, который является частью тела структуры, типа
uint8_t name[MAX_NAME];
Такая своеобразная сериализация данных.
Это не сериализация, при сериализации сериализируют =) то есть досконально проверяют каждое поле данных на предмет ожидаемого.
Ты можешь высчитывать поля структуры и записывать их явно как байты в строку, таким образом ты сформируешь формат данных, где последовательность имеет определённый порядок и определённый размер. Эту строку можно слать куда угодно. На месте приёма должена быть получена строка и её размер, количество «полей» внутри известно, у тебя же свой формат и размеры тоже, если входящий размер меньше или больше то ошибка, а далее считываеются байты, 1 сюда, 4 туда из них формуруется структура, а байтики прикодятся к типу полей структуры, по значению и всё. Иными словами, явно «распаковал» структуру (или массив структур) в один байтовый массив, содержимое и структура которого за ранее изветны, отправил, получил и разобрал массив обратно в структуры на принимающем устройстве, естественно проверяя всё. Так как у тебя ситуация простая, то нет смысла прибегать к чему-то готовому типа протобуфа и прочего. А можно и без сериализации, если это в коробочке Atmega8 и STM32 в друг друга по UART данными пуляются и сидят в одной пластиковой коробочке например, только размер и цельность данных проверять и всё.
Вот ещё можно почитать, про дырки
Исправление LINUX-ORG-RU, :
uint8_t* name;
Сработает то что ты хочешь, только в случае если name
не будет указателем, а будет массивом, который является частью тела структуры, типа
uint8_t name[MAX_NAME];
Такая своеобразная сериализация данных.
Это не сериализация, при сериализации сериализируют =) то есть досконально проверяют каждое поле данных на предмет ожидаемого.
Ты можешь высчитывать поля структуры и записывать их явно как байты в строку, таким образом ты сформируешь формат данных, где последовательность имеет определённый порядок и определённый размер. Эту строку можно слать куда угодно. На месте приёма должена быть получена строка и её размер, количество «полей» внутри известно, у тебя же свой формат и размеры тоже, если входящий размер меньше или больше то ошибка, а далее считываеются байты, 1 сюда, 4 туда из них формуруется структура, а байтики прикодятся к типу полей структуры, по значению и всё. Иными словами, явно «распаковал» структуру (или массив структур) в один байтовый массив, содержимое и структура которого за ранее изветны, отправил, получил и разобрал массив обратно в структуры на принимающем устройстве, естественно проверяя всё. Так как у тебя ситуация простая, то нет смысла прибегать к чему-то готовому типа протобуфа и прочего. А можно и без сериализации, если это в коробочке Atmega8 и STM32 в друг друга по UART данными пуляются и сидят в одной пластиковой коробочке например.
Вот ещё можно почитать, про дырки
Исходная версия LINUX-ORG-RU, :
uint8_t* name;
Сработает то что ты хочешь, только в случае если name
не будет указателем, а будет массивом, который является частью тела структуры, типа
uint8_t name[MAX_NAME];
Такая своеобразная сериализация данных.
Это не сериализация, при сериализации сериализируют =) то есть досконально проверяют каждое поле данных на предмет ожидаемого.
Ты можешь высчитывать поля структуры и записывать их явно как байты в строку, таким образом ты сформируешь формат данных, где последовательность имеет определённый порядок и определённый размер. Эту строку можно слать куда угодно. На месте приёма должена быть получена строка и её размер, количество «полей» внутри известно, у тебя же свой формат и размеры тоже, если входящий размер меньше или больше то ошибка, а далее считываеются байты, 1 сюда, 4 туда из них формуруется структура, а байтики прикодятся к типу полей структуры, по значению и всё. Иными словами, явно «распаковал» структуру (или массив структур) в один байтовый массив, содержимое и структура которого за ранее изветны, отправил, получил и разобрал массив обратно в структуры на принимающем устройстве, естественно проверяя всё. Так как у тебя ситуация простая, то нет смысла прибегать к чему-то готовому типа протобуфа и прочего.
Вот ещё можно почитать, про дырки