有可能是对齐问题。一般处理器要求在访问int或float时,地址需要4字节对齐,如果不对齐,就会抛异常。
最好是先定义好一个int或float型数据,然后用memcpy把目标数据拷贝进去,这样就不存在对齐问题了。
static uint32_t bytes_to_uint32(const unsigned char * data) {
uint32_t ret;
memcpy(&ret, data, sizeof(ret);
return ret;
}
static float bytes_to_float(const unsigned char * data) {
float ret;
memcpy(&ret, data, sizeof(ret);
return ret;
} |