Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
fcdb2398
Commit
fcdb2398
authored
Oct 06, 2014
by
Damien George
Browse files
py: Make int.to_bytes work on big endian machine.
Partly addresses issue #856.
parent
a9bcd51d
Changes
1
Hide whitespace changes
Inline
Side-by-side
py/objint.c
View file @
fcdb2398
...
...
@@ -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
[]
=
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment