summaryrefslogtreecommitdiffstatshomepage
path: root/py/objint.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/objint.c')
-rw-r--r--py/objint.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/py/objint.c b/py/objint.c
index e0fa7d661a..8e048ddec3 100644
--- a/py/objint.c
+++ b/py/objint.c
@@ -327,20 +327,28 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(int_from_bytes_fun_obj, 2, 3, int_fro
STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ(int_from_bytes_obj, (const mp_obj_t)&int_from_bytes_fun_obj);
STATIC mp_obj_t int_to_bytes(mp_uint_t n_args, const mp_obj_t *args) {
+ // TODO: Support long ints
+ // TODO: Support byteorder param (assumes 'little')
+ // TODO: Support signed param (assumes signed=False)
+
mp_int_t val = mp_obj_int_get_checked(args[0]);
+ mp_int_t len = MP_OBJ_SMALL_INT_VALUE(args[1]);
- uint len = MP_OBJ_SMALL_INT_VALUE(args[1]);
byte *data;
-
- // TODO: Support long ints
- // TODO: Support byteorder param
- // TODO: Support signed param
mp_obj_t o = mp_obj_str_builder_start(&mp_type_bytes, len, &data);
memset(data, 0, len);
- memcpy(data, &val, len < sizeof(mp_int_t) ? len : sizeof(mp_int_t));
+
+ if (MP_ENDIANNESS_LITTLE) {
+ memcpy(data, &val, len < sizeof(mp_int_t) ? len : sizeof(mp_int_t));
+ } else {
+ while (len--) {
+ *data++ = val;
+ val >>= 8;
+ }
+ }
+
return mp_obj_str_builder_end(o);
}
-
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(int_to_bytes_obj, 2, 4, int_to_bytes);
STATIC const mp_map_elem_t int_locals_dict_table[] = {