Использование Pragma для подгонки размера сокета в байтах - PullRequest
0 голосов
/ 22 октября 2018

Я использую реализацию протокола UDP, который отправляет сокет как символ *.Также я определил структуру, чтобы соответствовать размеру заголовка и тела сокета.Так же как:

#pragma once
typedef struct WHEATHER_STRUCT{
    uint8_t packetID; // 9
    uint16_t packetSize; // 11
    uint8_t subpacketID; // 0
    uint16_t subpacketOffset; // 0
    uint8_t reserved; // 0
    float cloudLayerAltitude; // 25000
}

Я проверил размер этого сокета, и он составляет 11 байтов.

Я совершенствую свои знания об указателях и пытаюсь получить доступ к этим переменным, используя указатель со смещением.Вот пример:

Начальная позиция структуры: & (this-> wheather_struct [0])

Я пытался использовать этот адрес памяти, чтобы получить значениепеременной packageID.Но это не работает для меня.

После получения этого решения я определю смещение для доступа к следующему значению в следующем предложении:

&(this->wheather_struct[0]) + 1 // Memory address of the next byte?

У меня есть адрес памяти первого элементаструктура, но я не могу получить значение этого.Не могли бы вы помочь мне, пожалуйста?

Если бы вы могли дать мне пример для доступа к значению cloudLayerAltitude с использованием указателей со смещением, это было бы здорово.Спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

Если this->wheather_struct является массивом (или указателем на первый элемент массива) из WHEATHER_STRUCT структур, то в памяти он будет выглядеть примерно так:

+--------------------+--------------------+--------------------+-----+
| wheather_struct[0] | wheather_struct[1] | wheather_struct[2] | ... |
+--------------------+--------------------+--------------------+-----+

Указатель на weather_struct[0] будет указывать на первый элемент этого массива.

Если вы добавите один к этому указателю, вы укажете на второй элемент этого массива.Не второй байт в структуре.

Чтобы получить указатель на второй байт, вам нужно обработать указатель &weather_data[0] как указатель на байты.

...