我有一个大小为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成员不会获得发送方分配的值。为什么会这样?
答案 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。