使用语法适合套接字大小(以字节为单位)

时间:2018-10-22 08:55:27

标签: c++ sockets udp pragma

我正在使用UDP协议的实现,该协议发送像char *这样的套接字。我还定义了一个结构,以根据大小适合套接字的标头和主体。就像:

#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])

我试图使用此内存地址来获取变量packetID的值。但这对我不起作用。

获得此解决方案后,我将定义一个偏移量以使用此语句访问下一个值:

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

我具有该结构的第一个元素的内存地址,但无法获取其值。你能帮我吗?

  

如果您能给我一个使用偏移量指针访问cloudLayerAltitude值的示例,那就太棒了。谢谢。

1 个答案:

答案 0 :(得分:1)

如果 this->wheather_structWHEATHER_STRUCT结构的数组(或指向数组第一个元素的指针),那么它将在内存中看起来像这样:< / p>

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

指向weather_struct[0]的指针将指向该数组的第一个元素。

如果将一个添加到该指针,则将指向该数组的第二个元素。不是结构中的第二个字节。

要获取指向第二个字节的指针,您需要将指针&weather_data[0]视为指向字节的指针。