2016-06-04 3 views
1

У меня есть файл output.log, который имеет список пробелов, ', разделенных целых чисел от [-2048,2048]. Я пытаюсь преобразовать это в двоичный файл с xxd. Я использую команду,Преобразование целых чисел в двоичные с xxd

xxd -r -p output.log > output.bin 

Однако, когда я прочитал файл обратно с XXD я теряю все признаки (-) и получить некоторые значения больше, чем 2048. Есть ли лучший способ сделать это? Благодарю.

редактировать: С выборочных данных ...

$ cat test 
4 0 -3 -2 -1 200 

$ xxd -r -p test > test.bin 

$ xxd test.bin 
0000000: 4012 00   @.. 

Может быть, я недоразумение, что XXD делает то, что я ожидал увидеть после того, как последняя команда, чтобы увидеть мои оригинальные входные данные, они отображаются. Это неправильно?

С гораздо большими наборами данных, время от времени будут отображаться правильные значения, но на выходе все еще присутствует тонна шума.

+0

Это просто этот диапазон значений, который демонстрирует проблему, или мы можем видеть это с помощью '[-4,4]'? Если это так, пожалуйста, отредактируйте свой Q, чтобы включить образцы данных, требуемый выход и текущий вывод, а также все шаги кодирования в вашем процессе. Удачи. – shellter

+0

Угадайте, что 'output.log' генерируется сторонней программой? Итак, dbl-проверьте, какой формат ваших данных есть с 'file output.log'. Возможно, вы увидите некоторый набор символов, отличных от ascii, например UTF8 или другой. Эта информация будет полезной для вашей проблемы. Удачи. – shellter

+0

output.log: текст ASCII, с очень длинными строками, без терминаторов строк – gutelfuldead

ответ

2

В вашем исходном файле ввода могут быть какие-то странные символы, xxd отлично работает с числами. Попробуйте взглянуть на свои данные, используя восьмеричную дампу od -c input, чтобы найти что-нибудь странное.

$ echo '-3000 -2048 -1 0 1 2048 3000' > foo.input 
$ cat foo.input 
-3000 -2048 -1 0 1 2048 3000 
$ xxd foo.input > foo.hex 
$ cat foo.hex 
0000000: 2d33 3030 3020 2d32 3034 3820 2d31 2030 -3000 -2048 -1 0 
0000010: 2031 2032 3034 3820 3330 3030 0a   1 2048 3000. 
$ xxd -r foo.hex > foo.output 
$ cat foo.output 
-3000 -2048 -1 0 1 2048 3000 
Смежные вопросы