短:
我收到了什么:
void* -> blob |version(int)|timestamp(long)|number(unsigned)|data(char[x])|
我想要的:
将其转换为 Data*
类型的指针
显式:
我正在通过网络接收一个 BLOB,并希望将其转换为以下结构(或类似结构):
struct Data
{
struct Header
{
int version;
long timestamp;
unsigned number;
}__attribute__((packed)) header
unsigned char* data;
}
其中 Data.data 是可变长度的无符号字符数组(JPEG 图像)。
该数组由 turbo-JPEG 库生成,我设置指针 Data.data = generated_image
(类型为 unsigned char[])
问题出在接收方,我尝试将指向 blob
的空指针转换为指向 struct Data
的指针。 Header 没有问题,但 Data->data
似乎为空/越界,而不是 char 数组。
我不能使用恒定长度,因为我不知道数据
的长度!
最佳答案
unsigned char* data;
Sending data
to another process 只是从当前进程的内存空间发送一个地址,它对另一个进程没有用(不包括共享内存)。您应该在发送前将其序列化为字节序列。
一个简单的解决方法是:
struct Data
{
struct Header
{
int version;
long timestamp;
unsigned number;
}
unsigned char data[FIXED_SIZE];
};
关于c++ - 如何正确地将指向 blob 的 void 指针转换为结构指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19450183/