- Published on
pbc 序列化的问题
- Authors

- Name
- Ushen
云风的pbc库已经停止维护了,但是公司还在用。 之前碰到一个问题, 传输float数组的时候会出现数据错乱的情况。
经测试发现, 数组奇数位是正常的(因为是lua,从1开始), 我怀疑是因为把float当成double了, float占4字节, double占8字节,所以偶数位元素其实读到的是前一个元素的高位。
拉代码下来查看, 发现了问题
static void
_pack_packed_32(struct _packed *p,struct pbc_wmessage *m) {
int n = pbc_array_size(p->data);
int len = n * 4;
int i;
pbc_var var;
_expand_message(m,10 + len);
m->ptr += _pbcV_encode32(len, m->ptr);
switch (p->ptype) {
case PTYPE_FLOAT:
for (i=0;i<n;i++) {
_pbcA_index(p->data, i, var);
float_encode(var->real , m->ptr + i * 8); //TODO ushen i * 4??
}
break;
default:
for (i=0;i<n;i++) {
_pbcA_index(p->data, i, var);
int32_encode(var->integer.low , m->ptr + i * 8); //TODO ushen i * 4??
}
break;
}
m->ptr += len;
}
这里是按8字节来写入, 但是读取的时候只读取4字节