我想要创建一个BASH脚本,它可以通过单词读取二进制文件,单词(32位),并将该单词传递给一个名为devmem的应用程序。打印出二进制文件内容的Bash脚本,一次只能显示一个单词,没有xxd
现在,我有:
...
for ((i=0; i<${num_words}; i++))
do
val=$(dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null)
echo -e "${val}" # Weird output...
devmem ${some_address} 32 ${val}
done
...
$ {} VAL有一些怪异(ASCII?)格式的字符表示,看起来像一个问号钻石。
如果我取代 “VAL =” 行:
val=$(dd ... | xxd -r -p)
我得到我想要的输出。
使用BASH复制xxd功能的最简单方法是什么?
注:我正在开发一个嵌入式Linux项目,其中的要求不允许我安装xxd。 (dd - > binary word - > devmem)而不是(hexdump - > file,parse file - >)这个脚本是性能驱动的,如果我在我的方法中错了,请纠正我的错误,但是因为这个原因,我选择了dd-> binary word-> devmem) devmem)。不管最终目标的最佳路线如何,这个练习都给了我一些麻烦,我非常感谢有人帮我弄清楚如何做到这一点。
谢谢!
如果输入文件是二进制文件,我希望'$ val'有一个“怪异”的外观,如果你做了'echo $ val',因为'$ val'会直接从文件中获得二进制信息, 'echo'会显示它,就好像它们是ASCII码一样(无论它们是否可打印)。所以我不确定为什么用'xxd -r -p'(它做一个反向十六进制转储 - 采用ASCII十六进制并给二进制 - 与我以为你会想要的相反)为您提供了所需的结果。 – lurker