Как преобразовать с плавающей запятой в двоичный файл в командной строке? - PullRequest
1 голос
/ 13 апреля 2019

Мне нужен простой способ преобразования строки с плавающей запятой в командной строке в двоичный тип с плавающей запятой.

Например:

$ echo "1.23" > file.bin

За исключением выходных данных в виде 4 байтовIEEE float

Я ожидаю результата

$ od -f -An file.bin
1.23

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Я надеюсь, что есть более компактный способ сделать это, но если нет, попробуйте:

Python 2:

$ python -c "import sys,struct; sys.stdout.write(struct.pack('f', float(sys.argv[-1])))" 1.23 >file.bin
$ od -f -An file.bin
            1.23

Python3:

$ python3 -c "import sys,struct; sys.stdout.buffer.write(struct.pack('f', float(sys.argv[-1])))" 1.23 >file3.bin
$ od -f -An file3.bin
            1.23

(Шляпа: Марк Дикинсон )

Как это работает

  • import sys,struct

    Указывает Python импортировать модули sys и struct.

  • sys.stdout.write(struct.pack('f', float(sys.argv[-1])))

    Указывает Python принять последний аргумент в командной строке,sys.argv[-1]) и, используйте float для преобразования его в число с плавающей запятой, и struct.pack для преобразования числа с плавающей запятой в битовую строку, и, наконец, sys.stdout.write для отправки байтов в стандартный вывод.

0 голосов
/ 13 апреля 2019

Подобный, но менее многословный подход с использованием Perl:

$ perl -e 'print pack("f", $ARGV[0])' 1.23 > file.bin
...