Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本,打印二进制文件的内容,一次一个字,不带xxd_Linux_Bash_Binary_Hexdump_Xxd - Fatal编程技术网

Linux Bash脚本,打印二进制文件的内容,一次一个字,不带xxd

Linux Bash脚本,打印二进制文件的内容,一次一个字,不带xxd,linux,bash,binary,hexdump,xxd,Linux,Bash,Binary,Hexdump,Xxd,我想创建一个BASH脚本,逐字读取二进制文件(32位),并将该字传递给一个名为devmem的应用程序 现在,我有: ... 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} don

我想创建一个BASH脚本,逐字读取二进制文件(32位),并将该字传递给一个名为devmem的应用程序

现在,我有:

...
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
...
我得到了我想要的输出

使用BASH复制xxd功能的最简单方法是什么?

注意:我正在从事一个嵌入式Linux项目,其中要求不允许我安装xxd

这个脚本是性能驱动的,如果我的方法错了,请纠正我,但是出于这个原因,我选择了(dd->binary word->devmem)而不是(hextump->file,parse file->devmem)。 -不管我最终目标的最佳路线是什么,这个练习给了我一些麻烦,我非常感谢有人帮助我找出如何实现这个目标


谢谢

如我所见,您不应该使用“|”或echo,因为它们都是ASCII工具。相反,我认为“>”可以为你工作
我认为
devmem
是一个bash函数或别名,所以我会尝试以下方法:

((i=0;i/dev/null 1>二进制文件)的

#echo-e“${val}”#奇怪的输出。。。
devmem${some_address}32$(cat二进制文件)
完成
由于cat只是连接字节流,所以它也可以用来连接二进制文件,在这里它只连接字节序列


或者您可以更改
devmem
以接受文件作为输入…我希望这会有所帮助!

如果输入文件是二进制的,我希望
$val
会有一个“奇怪的”如果您使用了
echo$val
,请查看它,因为
$val
将直接从文件中获取二进制信息,
echo
将显示它,就像它们是ASCII代码一样(无论它们是否可打印)。因此我不确定为什么要使用
xxd-r-p
(这是一个反向的十六进制转储-获取ASCII十六进制并给出二进制-与我认为您想要的相反)提供您想要的结果。
val=$(dd ... | xxd -r -p)
for (( i=0; i<${num_words}; i++ ))
do
    dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null 1> binary_file
#    echo -e "${val}" # Weird output...
    devmem ${some_address} 32 $(cat binary_file)
done