format = PQ_BINARY
cdef object cload(self, const char *data, size_t length):
- cdef int32_t bedata[4]
+ cdef int64_t bedata[2]
memcpy(&bedata, data, sizeof(bedata))
- cdef int64_t val = endian.be64toh((<uint64_t *>bedata)[0])
- cdef int32_t days = endian.be32toh(bedata[2])
- cdef int32_t months = endian.be32toh(bedata[3])
+ cdef int64_t val = endian.be64toh(bedata[0])
+ cdef int32_t days = endian.be32toh((<uint32_t *>bedata)[2])
+ cdef int32_t months = endian.be32toh((<uint32_t *>bedata)[3])
cdef int years
with cython.cdivision(True):
cdef Py_ssize_t cdump(self, obj, bytearray rv, Py_ssize_t offset) except -1:
cdef double d = PyFloat_AsDouble(obj)
- cdef uint64_t beval = endian.htobe64((<uint64_t *>&d)[0])
+ cdef uint64_t ival
+ memcpy(&ival, &d, sizeof(ival))
+ cdef uint64_t beval = endian.htobe64(ival)
cdef uint64_t *buf = <uint64_t *>CDumper.ensure_size(
rv, offset, sizeof(beval))
memcpy(buf, &beval, sizeof(beval))
cdef Py_ssize_t cdump(self, obj, bytearray rv, Py_ssize_t offset) except -1:
cdef float f = <float>PyFloat_AsDouble(obj)
- cdef uint32_t beval = endian.htobe32((<uint32_t *>&f)[0])
+ cdef uint32_t ival
+ memcpy(&ival, &f, sizeof(ival))
+ cdef uint32_t beval = endian.htobe32(ival)
cdef uint32_t *buf = <uint32_t *>CDumper.ensure_size(
rv, offset, sizeof(beval))
memcpy(buf, &beval, sizeof(beval))