首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Memcpy未能从流复制到浮动变量

Memcpy未能从流复制到浮动变量
EN

Stack Overflow用户
提问于 2022-05-02 22:42:29
回答 1查看 60关注 0票数 1

我试图通过套接字发送一个结构,为此,我对它进行序列化和反序列化

代码语言:javascript
复制
typedef struct pcb{
    uint16_t  id;
    uint16_t  tamano;
    uint8_t   pc;
    int       tp;       
    float     srt;
}t_pcb;

我的问题出现在试图重新构建结构时,特别是在试图存储浮点值时。

代码语言:javascript
复制
static void deserializar_header_PCB_KTC(void* stream, t_pcb* pcb, uint8_t *tamanoInstrucciones) {
    int offset = 0;


    memcpy(pcb->id, stream, sizeof(uint16_t));
    offset = sizeof(uint16_t);
    memcpy(pcb->tamano, stream+offset, sizeof(uint16_t));
    offset += sizeof(uint16_t);
    memcpy(pcb->pc, stream+offset, sizeof(uint8_t));
    offset += sizeof(uint8_t);
    memcpy(pcb->tp, stream+offset, sizeof(int));
    offset += sizeof(int);
    memcpy(pcb->srt,stream+offset, sizeof(float)); 
    offset += sizeof(float);
    memcpy(tamanoInstrucciones, stream+offset, sizeof(int));

    
}

出现以下错误:

代码语言:javascript
复制
src/protocolo.c:323:12: error: incompatible type for argument 1 of ‘memcpy’
     memcpy(f, stream+offset, sizeof(float)); 

我已经使用int类型而不是浮点测试了通信,并且它正常工作。我考虑过将浮点数乘以并使用int类型,但我可能会失去定义,因此我试图找到其他方法。

如果有人能帮我这个忙,我会很感激的。

串行化

代码语言:javascript
复制
static void* serializar_header_PCB_KTC(t_pcb* pcb) {
    void* stream = malloc(sizeof(op) + sizeof(int) + sizeof(uint16_t) * 2 + sizeof(uint8_t) * 2 + sizeof(float));
    void* pos    = stream;
    uint8_t tamanoInstrucciones = tamano_intrucciones_pcb(pcb);
    
    op cop = HEADER;

    memcpy(pos, &cop, sizeof(op));
    pos += sizeof(op);
    memcpy(pos, &pcb->id, sizeof(uint16_t));
    pos += sizeof(uint16_t);
    memcpy(pos, &pcb->tamano, sizeof(uint16_t));
    pos += sizeof(uint16_t);
    memcpy(pos, &pcb->pc, sizeof(uint8_t));
    pos += sizeof(uint8_t);
    memcpy(pos, &pcb->tp, sizeof(int));
    pos += sizeof(int);
    memcpy(pos, &pcb->srt, sizeof(float));
    pos += sizeof(float);
    memcpy(pos, &tamanoInstrucciones, sizeof(uint8_t));
    return stream;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 00:54:01

始终使用对象的附件与memcpy。您正在使用该值,您需要发送指针。例如:

代码语言:javascript
复制
memcpy(&pcb->srt,stream+offset, sizeof(float)); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72093119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档