c++ - 如何正确地将指向 blob 的 void 指针转换为结构指针?

标签 c++ c pointers struct

短:

我收到了什么:

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/

相关文章:

c - 使用指向 int 的指针作为数组索引

c - 如何将 char * 分配给字符数组?

c++ - 重访 vector 、指针、兔子和回收内存

c++ - 在 C++ 中查找 char* 数组中的 char* 元素

c++ - 我可以获得在键盘上按下某个键的时间量吗

c++ - 如何在不使用 boost 或创建模板的情况下在 C++ 中同时对两个 vector 进行排序?

c++ - 模板 self 友元

c++ - GDB 中没有函数名称的大型核心转储

在 Windows 中使用 C 创建三个新进程时崩溃

c - 定点缩放和乘法精度