Можно ли записать двоичное представление числа в файл, используя скрипт bash? - PullRequest
1 голос
/ 02 марта 2020

Мне нужно записать 4-байтовое представление числа (176) в файл .bin. Я использовал следующую команду

perl -we 'print pack "N", shift' 176 >> package.bin

, и она отлично работает. Но теперь мне нужно сделать то же самое без использования perl. Является ли это возможным? Я могу найти решения только с perl, но, к сожалению, я не могу использовать его из-за требований проекта.

Я также попробовал это решение:

local n bit
for (( n=$1 ; n>0 ; n >>= 1 )); do  bit="$(( n&1 ))$bit"; done
echo -n -e $bit > tobin.bin

Но оно не работает, потому что он записывает 10110000 в мой файл назначения, и это неверно, так как считается, что его длина составляет 8 байт, а не 4 (1 байт на каждый символ).

1 Ответ

2 голосов
/ 02 марта 2020

Попробуйте

num=176

printf -v oct0 '%03o' "$(( (num>>24) & 0xff ))"
printf -v oct1 '%03o' "$(( (num>>16) & 0xff ))"
printf -v oct2 '%03o' "$(( (num>> 8) & 0xff ))"
printf -v oct3 '%03o' "$(( num       & 0xff ))"

printf "\\$oct0\\$oct1\\$oct2\\$oct3" >package.bin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...