Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Categories:

Перевод бинарных файлов в массив

Для этой операции, необходимой довольно-таки часто (особенно для микроконтроллеров: скажем, мелкую картинку во флеш записать или кусочек звукового файла), обычно пишутся велосипеды вроде такого:
hexdump -e '20/1 "0x%02x, " "\n"' testbin
0x0d, 0x19, 0x32, 0x44, 0xc9, 0xc9, 0xc9, 0x92, 0x24, 0x3b, 0x3b, 0x3b, 0x45, 0x46, 0x46, 0x6a, 0xc4, 0x88, 0x11, 0x84,
....

потом это ручками правится и все здорово.
Однако, наткнулся на SO на замечательный совет: использовать vim (точнее, утилиту, идущую с ним):
xxd -i testbin 
unsigned char testbin[] = {
  0x0d, 0x19, 0x32, 0x44, 0xc9, 0xc9, 0xc9, 0x92, 0x24, 0x3b, 0x3b, 0x3b,
....
};
unsigned int testbin_len = 100;

Очень удобно: практически без изменений (разве что const дописать) результат можно использовать!
Правда, с разрядностью выше 8 xxd не справится. И здесь уже велосипеды. 16 бит:
hexdump -e '16/2 "0x%04x, " "\n"' testbin 
0x190d, 0x4432, 0xc9c9, 0x92c9, 0x3b24, 0x3b3b, 0x4645, 0x6a46, 0x88c4, 0x8411, 0x0003, 0x0000, 0x0000, 0x0000, 0x7dc0, 0xc9c8,
...

32 бита:
hexdump -e '10/4 "0x%08x, " "\n"' testbin 
0x4432190d, 0x92c9c9c9, 0x3b3b3b24, 0x6a464645, 0x841188c4, 0x00000003, 0x00000000, 0xc9c87dc0, 0xa7a791c9, 0xf2f2f2a7,
...

Ну и видно, что все в little endian. Если возникнет нужда с big endian что-то делать, то придется городить еще какой-то велосипед. Либо писать универсальную утилиту, которая будет делать то же, что xxd, но с бóльшими возможностями.
Tags: snippets, stm32, stm8, всячина, для себя, железяки
Subscribe

  • Хеши строковых команд для МК

    Долго я к этому шел, но, похоже, пора уже: однобуквенные команды сложно запоминать (особенно если команд толпа, и большая часть с этими буквами…

  • OBS studio

    В общем, надоумили меня попробовать трансляцию в youtube. Напрямую скринкасты он писать не умеет, но может забирать поток с промежуточного…

  • M$ teams…

    Начал с сегодняшнего дня студентам ЮФУ удаленно лекции читать. У них все завязано на различные корпорации зла. И базовая работа - через teams. ОК,…

promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 5 comments