如何正确地将指向Blob的void指针强制转换为结构指针?

神兽

短:

我收到的是:

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 DataHeader没问题,但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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C-将指针转换为指向void的指针

来自分类Dev

我可以合法地将指向结构成员的指针转换为指向该结构的指针吗?

来自分类Dev

我可以合法地将指向结构成员的指针转换为指向该结构的指针吗?

来自分类Dev

如何正确地将std :: vector <std :: vector <double>>强制转换为void *并重新解释回去?

来自分类Dev

为什么将指向int的指针转换为void *但将指向函数的指针转换为bool?

来自分类Dev

将(指针指向可变大小的数组)强制转换为(指针指向的指针)

来自分类Dev

指针强制指向void指针的显式强制转换

来自分类Dev

如何在CFFI中找到指向结构的指针的地址并将其转换为void **

来自分类Dev

将void指针强制转换为结构体并对其进行初始化

来自分类Dev

无法正确地将数据转换为层次结构

来自分类Dev

如何正确地将NSNumber强制转换为long long int?

来自分类Dev

如何正确地将Mpmath矩阵强制转换为numpy ndarray(并使mpmath.mpf浮动)

来自分类Dev

如何正确地将 vector<int> 转换为 void* 并返回到 vector<int>?

来自分类Dev

函数指针将参数强制转换为 void

来自分类Dev

为什么将NULL强制转换为结构指针?

来自分类Dev

将类型强制转换为结构指针时出错

来自分类Dev

类型将void指针转换为结构类型

来自分类Dev

将包含void *指针的结构转换为其等效的Ctype

来自分类Dev

如何将指向 Python cffi 结构的指针转换为 System.IntPtr (.NET)?

来自分类Dev

是否在C89中强制将指向不同结构的指针转换为有意义的?

来自分类Dev

双指针的地址强制转换为void **

来自分类Dev

如何正确地将dlsym返回的指针分配给函数指针类型的变量?

来自分类Dev

如何正确地将JSON转换为Python对象?

来自分类Dev

如何正确地将整数转换为位串?

来自分类Dev

如何正确地将SQL行转换为列?

来自分类Dev

如何正确地将 _foo 转换为 `Foo` 类型?

来自分类Dev

将指针转换为指向该结构的唯一成员的指针

来自分类Dev

如何将void指针转换为int指针,然后将int指针存储在其中?

来自分类Dev

在C语言中,将指针强制转换为struct ao void *的指针有什么用?

Related 相关文章

  1. 1

    C-将指针转换为指向void的指针

  2. 2

    我可以合法地将指向结构成员的指针转换为指向该结构的指针吗?

  3. 3

    我可以合法地将指向结构成员的指针转换为指向该结构的指针吗?

  4. 4

    如何正确地将std :: vector <std :: vector <double>>强制转换为void *并重新解释回去?

  5. 5

    为什么将指向int的指针转换为void *但将指向函数的指针转换为bool?

  6. 6

    将(指针指向可变大小的数组)强制转换为(指针指向的指针)

  7. 7

    指针强制指向void指针的显式强制转换

  8. 8

    如何在CFFI中找到指向结构的指针的地址并将其转换为void **

  9. 9

    将void指针强制转换为结构体并对其进行初始化

  10. 10

    无法正确地将数据转换为层次结构

  11. 11

    如何正确地将NSNumber强制转换为long long int?

  12. 12

    如何正确地将Mpmath矩阵强制转换为numpy ndarray(并使mpmath.mpf浮动)

  13. 13

    如何正确地将 vector<int> 转换为 void* 并返回到 vector<int>?

  14. 14

    函数指针将参数强制转换为 void

  15. 15

    为什么将NULL强制转换为结构指针?

  16. 16

    将类型强制转换为结构指针时出错

  17. 17

    类型将void指针转换为结构类型

  18. 18

    将包含void *指针的结构转换为其等效的Ctype

  19. 19

    如何将指向 Python cffi 结构的指针转换为 System.IntPtr (.NET)?

  20. 20

    是否在C89中强制将指向不同结构的指针转换为有意义的?

  21. 21

    双指针的地址强制转换为void **

  22. 22

    如何正确地将dlsym返回的指针分配给函数指针类型的变量?

  23. 23

    如何正确地将JSON转换为Python对象?

  24. 24

    如何正确地将整数转换为位串?

  25. 25

    如何正确地将SQL行转换为列?

  26. 26

    如何正确地将 _foo 转换为 `Foo` 类型?

  27. 27

    将指针转换为指向该结构的唯一成员的指针

  28. 28

    如何将void指针转换为int指针,然后将int指针存储在其中?

  29. 29

    在C语言中,将指针强制转换为struct ao void *的指针有什么用?

热门标签

归档