C++ 如何正确地将指向blob的void指针强制转换为结构指针?
short: 我收到的:C++ 如何正确地将指向blob的void指针强制转换为结构指针?,c++,c,pointers,struct,C++,C,Pointers,Struct,short: 我收到的: void* -> blob |version(int)|timestamp(long)|number(unsigned)|data(char[x])| 我想要的是: 将其转换为Data* 明确: 我通过网络收到一个BLOB,并希望将其转换为以下结构(或类似结构): 其中Data.Data是长度可变的无符号字符数组(JPEG图像)。 这个数组是由turbo JPEG库生成的,我设置了指针Data.Data=generated\u image(类型为unsigned
void* -> blob |version(int)|timestamp(long)|number(unsigned)|data(char[x])|
我想要的是:
将其转换为Data*
明确:
我通过网络收到一个BLOB,并希望将其转换为以下结构(或类似结构):
其中Data.Data是长度可变的无符号字符数组(JPEG图像)。
这个数组是由turbo JPEG库生成的,我设置了指针Data.Data=generated\u image
(类型为unsigned char[])
问题出在接收方,我试图将指向blob
的空指针转换为指向struct Data
的指针。标题没有问题,但是Data->Data
似乎为空/超出边界,而不是字符数组
我不能使用固定长度,就像我不知道数据的长度一样
unsigned char* data;
将数据
发送到另一个进程只会从当前进程的内存空间发送一个地址,对另一个进程没有用处(不包括共享内存)。您应该在发送之前将其序列化为字节序列
一个简单的解决方法是:
struct Data
{
struct Header
{
int version;
long timestamp;
unsigned number;
}
unsigned char data[FIXED_SIZE];
};
将数据
发送到另一个进程只会从当前进程的内存空间发送一个地址,对另一个进程没有用处(不包括共享内存)。您应该在发送之前将其序列化为字节序列
一个简单的解决方法是:
struct Data
{
struct Header
{
int version;
long timestamp;
unsigned number;
}
unsigned char data[FIXED_SIZE];
};
我猜您是使用以下方式发送的:
Data d;
// fill in d
send(SOME_SOCKET, static_cast<char*>(&d), sizeof(d), ...);
这样,您还可以获得数据的大小,并将其分别序列化到套接字:
d.header.size = d.data.size();
send(SOME_SOCKET, &d.header, sizeof(d.header), ...);
send(SOME_SOCKET, &d.data[0], d.data.size(), ...);
我猜您是使用以下方式发送的:
Data d;
// fill in d
send(SOME_SOCKET, static_cast<char*>(&d), sizeof(d), ...);
这样,您还可以获得数据的大小,并将其分别序列化到套接字:
d.header.size = d.data.size();
send(SOME_SOCKET, &d.header, sizeof(d.header), ...);
send(SOME_SOCKET, &d.data[0], d.data.size(), ...);
您是否正在发送
struct
?如果是这样,您将发送指针,它在接收端将不会指向任何地方。@BoBTFish“数据肯定是通过网络发送的,因为我正在观察网络”示例中有语法错误,内部struct Header
已声明但从未实际使用过,它应该是例如struct Header{…}Header
创建该类型的struct Data
成员。@Theolodis非常感谢您让我们投入宝贵的时间,不仅为您的问题找到解决方案,而且必须首先找到问题。如果你不能很好地描述你的问题,你怎么能期望我们找到一个合适的解决方案?@Theolodis也许你没有意识到,如果不包括你真正的代码,你的问题就相当于:“这里有一些代码:int main(){std::难道你只是在发送struct
?如果是这样,你将发送指针,而指针在接收端将不会指向任何地方。@BoBTFish“数据肯定是通过网络发送的,因为我正在观察网络“示例中存在语法错误,声明了内部struct Header
,但从未实际使用过,例如struct Header{…}”header;
创建该类型的struct Data
的成员。@Theolodis非常感谢您让我们投入宝贵的时间,不仅为您的问题找到解决方案,而且还必须先找到问题。如果您无法正确描述您的问题,您如何期望我们找到正确的解决方案?@Theolod也许你没有意识到,如果不包括你的真实代码,你的问题就等同于:“这里有一些代码:int main(){std::cout谢谢你的时间,但我不能使用固定长度,因为图像的长度是可变的,未定义的。谢谢你的时间,但我不能使用固定长度,因为图像的长度是可变的,未定义的。