C语言 Memcpy从流复制到浮点变量失败



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

typedef struct pcb{
uint16_t  id;
uint16_t  tamano;
uint8_t   pc;
int       tp;       
float     srt;
}t_pcb;

我的问题出现在试图重建结构体时,特别是当试图存储float值时。

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));

}

出现以下错误:

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

我已经使用int类型而不是float类型测试了通信,它工作正常。我考虑过将float值相乘并使用int类型,但这会失去定义,所以我试图找到其他方法。

如果有人能帮我这个忙,我将非常感激。

序列化
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;
}

始终使用带有memcpy的对象的地址。你正在使用这个值,你需要发送指针。例如:

memcpy(&pcb->srt,stream+offset, sizeof(float)); 

最新更新