Я пытаюсь подключить Rasberry Pi к некоторому дисплею, используя шину i2c. Для начала я хотел написать что-то вручную, в частности байты, в файл. Как вы пишете конкретные байты в файл? Я уже прочитал это, и я решил, что моя проблема должна быть решена примерно так
echo -n -e \x66\x6f\x6f > byteFileForNow
Однако, когда я открываю этот файл с помощью nano, вместо foo я вижу:
x66x6fx6f
Таким образом, обратные слэши были исключены, но не сами байты. Я также попробовал то же самое только без -e на этот раз, поэтому я ожидал увидеть \ x66 \ x6f \ x6f , но получил то же самое, что и раньше.
Таким образом, эхо избегает обратной косой черты, обратной косой черты в одиночку и обратной косой черты независимо от того, предполагается ли это.
Есть идеи, как это исправить?
Согласно справочной странице, которая должна была сделать то, что я ищу.
источник
bash
обращаться\xHH
правильно, но не все оболочки делают.Ракушка
В оболочке вы можете использовать
printf
:Примечание:
%b
- Выведите связанный аргумент при интерпретации обратной косой черты.Perl
С Perl это еще проще:
питон
Если у вас установлен Python, попробуйте следующий однострочный:
Тестирование:
источник
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
илиperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
это не портативный.printf '\x66'
немного более портативный (работаетksh93
, но не сdash
ниyash
).printf '\146\157\157'
илиprintf %b '\0146\0157\0157'
будет портативным / стандартным.Это может не отвечать непосредственно на вопрос, но вы также можете использовать
vi
в шестнадцатеричном режиме:Откройте файл и введите: ESC,
:%!xxd
чтобы переключиться в шестнадцатеричный режим.Вы сможете редактировать шестнадцатеричную часть (текстовая часть не будет обновляться при изменении шестнадцатеричной части).
Когда вы закончите, снова нажмите escape и наберите: ESC,
:%!xxd -r
чтобы записать изменения, которые вы сделали в шестнадцатеричном режиме (не забудьте сохранить потом).источник
В онлайн-руководстве по каждой команде много информации; всегда стоит взглянуть на это, прежде чем сдавать вопрос.
man echo
объясняет, какие escape-последовательности разрешены Вот выдержка.Так что \ x86 просто неверно. она должна быть восьмеричной и ставить вашу строку в двойные кавычки, иначе она будет интерпретироваться оболочкой.
Пример:
Редактировать 1
Как напомнил мне Ouki, echo - это также встроенная оболочка, поэтому информация находится на странице руководства для bash
man bash
; вот соответствующий раздел. Но используйте кавычки"
вокруг вашей строки, чтобы оболочка не интерпретировала обратную косую черту.источник
echo
, как правило , команда встроенной. Так что это зависит от оболочки, которую вы используете. Linux по умолчанию являетсяbash
;\xHH
правильно отображает символ через его шестнадцатеричное значение.