From 271d18eb08ec488ee45f8e6cd852e8236074f082 Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 25 Apr 2015 23:16:39 +0100 Subject: py: Support conversion of bignum to bytes. This gets int.to_bytes working for bignum, and also struct.pack with 'q' and 'Q' args on 32-bit machines. Addresses issue #1155. --- py/objint_longlong.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'py/objint_longlong.c') diff --git a/py/objint_longlong.c b/py/objint_longlong.c index 837889704..5b2c6d3f5 100644 --- a/py/objint_longlong.c +++ b/py/objint_longlong.c @@ -63,6 +63,24 @@ mp_int_t mp_obj_int_hash(mp_obj_t self_in) { return self->val; } +void mp_obj_int_to_bytes_impl(mp_obj_t self_in, bool big_endian, mp_uint_t len, byte *buf) { + assert(MP_OBJ_IS_TYPE(self_in, &mp_type_int)); + mp_obj_int_t *self = self_in; + long long val = self->val; + if (big_endian) { + byte *b = buf + len; + while (b > buf) { + *--b = val; + val >>= 8; + } + } else { + for (; len > 0; --len) { + *buf++ = val; + val >>= 8; + } + } +} + bool mp_obj_int_is_positive(mp_obj_t self_in) { if (MP_OBJ_IS_SMALL_INT(self_in)) { return MP_OBJ_SMALL_INT_VALUE(self_in) >= 0; -- cgit v1.2.3