【发布时间】:2013-10-18 12:52:56
【问题描述】:
简短:
我收到了什么:
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(of type unsigned char[])
问题出在接收端,我尝试将指向blob 的空指针转换为指向struct Data 的指针。 Header 没问题,但 Data->data 似乎是 null/超出范围,而不是 char 数组。
我不能使用恒定长度,因为我确实不知道data的长度!
【问题讨论】:
-
您只是发送
struct吗?如果是这样,您将发送指针,而在接收方将不会指向任何地方。 -
@BoBTFish "数据肯定是通过网络发送的,因为我正在观察网络"
-
示例中存在语法错误,内部
struct Header已声明但从未实际使用过,应该是例如struct Header {...} header;创建该类型的struct Data的成员。 -
@Theolodis 非常感谢您让我们投入宝贵的时间,不仅要找到解决问题的方法,还要先找到问题。如果您懒得正确描述您的问题,您怎么能指望我们找到合适的解决方案?
-
@Theolodis 也许您没有意识到,如果不包含您的真实代码,您的问题就相当于:“这里有一些代码:
int main(){ std::cout << "Hello world\n"; }。为什么我的 Doom 克隆会崩溃?”