短:
我收到的是:
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
似乎是null /无界,而不是char数组。
我不能使用固定长度,因为我不知道data
!的长度!
我猜您正在使用类似的方式发送它:
Data d;
// fill in d
send(SOME_SOCKET, static_cast<char*>(&d), sizeof(d), ...);
这将发送您的Data
结构,但将包含data
指针的值,而不是其指向的值。
您最好按以下方式存储数据并将其作为标头和正文发送:
struct Data
{
struct Header
{
int version;
long timestamp;
unsigned number;
std::size_t size;
}
//unsigned char* data;
std::vector<unsigned char> data;
};
这样您就拥有了数据的大小,并将其分别序列化到套接字:
d.header.size = d.data.size();
send(SOME_SOCKET, &d.header, sizeof(d.header), ...);
send(SOME_SOCKET, &d.data[0], d.data.size(), ...);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句