LINUX.ORG.RU

История изменений

Исправление 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 туда из них формуруется структура, а байтики прикодятся к типу полей структуры, по значению и всё. Иными словами, явно «распаковал» структуру (или массив структур) в один байтовый массив, содержимое и структура которого за ранее изветны, отправил, получил и разобрал массив обратно в структуры на принимающем устройстве, естественно проверяя всё. Так как у тебя ситуация простая, то нет смысла прибегать к чему-то готовому типа протобуфа и прочего.

Вот ещё можно почитать, про дырки