从struct转换为char *的问题

时间:2013-05-14 10:03:49

标签: c++ type-conversion winsock2

我有一个大小为57字节的结构但是当我转换为char *时,char *变量的大小只显示4个字节。这有什么问题?

代码:

struct overhead{

    unsigned char flags;
    unsigned short int seqNo, timeDiff, threshold, length;  

};    

struct payload{

    double forceX,forceY,forceZ,positionX,positionY,positionZ;

};


struct packet{

    overhead fields;
    payload data;

};

packet pack;

// Assigning some values to the struct members.

char * message = (char *)pack;

retval = send(conn_socket, message , sizeof(message), 0);

编辑:

在接收方,如果将char *转换为数据包*,则strut成员不会获得发送方分配的值。为什么会这样?

3 个答案:

答案 0 :(得分:3)

char *是一个指针(即一个存储器地址),因此将是32位(在32位平台上); 4个字节。

答案 1 :(得分:1)

char*位于32位机器上4字节。所以sizeof(char*) == 4.如果你想要长度可以使用sizeof(packet)。见here

在接收方,如果将字符序列化为packet*,则strut成员不会获取发送方分配的值。为什么会这样?

你应该序列化你的结构而不仅仅是强制转换它。见boost serialization。 实际上,在没有序列化的情况下发送/接收数据并不是一个好主意。但是如果你现在只在一台机器上,在两台相同的机器上,你可以使用一个联合将你的结构组合成一个char数组。

答案 2 :(得分:0)

pack是指向char的指针。 32位平台上的指针大小为4个字节。如果您想要pack指向的数据的长度,请尝试strlen