Я пытаюсь реплицировать uint32_t
значения преобразования в unsigned char
массивы в Python (я уже сделал это в C)
Это моя существующая функция C:
unsigned char *uint32_to_char_array(const uint32_t n)
{
unsigned char *a;
a = wrap_calloc(4, sizeof(unsigned char));
a[0] = (n >> 24) & 0xff; /* high-order (leftmost) byte: bits 24-31 */
a[1] = (n >> 16) & 0xff; /* next byte, counting from left: bits 16-23 */
a[2] = (n >> 8) & 0xff; /* next byte, bits 8-15 */
a[3] = n & 0xff; /* low-order byte: bits 0-7 */
return a;
}
Если бы я сделал следующее в GDB:
(gdb) p uint32_to_char_array(0x00240918)[0]@4 = "\000$\t\030"
И эту строку я пытаюсь сгенерировать в python.
т.е. для uint32_t
входного значения 0x240918
я хочу получить выходную строку "\000$\t\030"
Я искал SO, но пока безрезультатно, особенно это -> Как преобразовать целочисленное значение в массив из четырех байтов в python , но ни один из ответов не дает комбинацию ввода / вывода указано выше
Я использую 2.7, но при необходимости могу использовать> 3.0.
Обновление:
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x240918.to_bytes(4, "big")
b'\x00$\t\x18'
Хммм, немного по-другому - я уверен, что ответ смотрит мне прямо в лицо, но я не вижу, что это?
Итак, я вижу:
>>> b"\000$\t\030"
b'\x00$\t\x18'
Но как можно достичь обратного? т.е. * * одна тысяча тридцать две
>>> b'\x00$\t\x18'
b"\000$\t\030"
Может быть, вопрос в том, как я могу печатать байтовый литерал в восьмеричном, а не шестнадцатеричном формате?