Linux shell中没有od或hd的八进制转储

Linux shell中没有od或hd的八进制转储,shell,od,Shell,Od,我正试图通过以下George Georgovassilis在这里所做的工作来控制Axis嵌入式Linux产品的Kasa Smartplug: 我已经成功地从轴盒上打开和关闭了插头,但由于我没有od(或hd、hexdump或xxd),并且Smartplug输出是二进制的,所以我在尝试查询Smartplug的打开/关闭状态时遇到了问题。George的代码片段可以做到这一点: decode(){ code=171 input_num=`od $ODOPTS` IFS=' ' r

我正试图通过以下George Georgovassilis在这里所做的工作来控制Axis嵌入式Linux产品的Kasa Smartplug: 我已经成功地从轴盒上打开和关闭了插头,但由于我没有od(或hd、hexdump或xxd),并且Smartplug输出是二进制的,所以我在尝试查询Smartplug的打开/关闭状态时遇到了问题。George的代码片段可以做到这一点:

decode(){
    code=171
    input_num=`od $ODOPTS`
    IFS=' ' read -r -a array <<< "$input_num"
    args_for_printf=""
    for element in "${array[@]}"
    do
        output=$(( $element ^ $code ))
        args_for_printf="$args_for_printf\x$(printf %x $output)"
        code=$element
    done
    printf "$args_for_printf"
 }
decode(){
代码=171
input_num=`od$ODOPTS`
IFS=''读-r-a数组
Linux shell中没有od或hd的八进制转储

使用
awk
似乎很简单。借用代码并从中拆分很简单:

awk -v ORS='' -v OFS='' 'BEGIN{ for(n=0;n<256;n++)ord[sprintf("%c",n)]=n }  
    { split($0, chars, "");
    chars[length($0)+1]=RS; # add the newline to output. One could check if RS is empty.
    # and print
    for (i=1;i<=length($0)+1;++i) printf("%o\n", ord[chars[i]]) }'

awk-vors=''-vofs='''BEGIN{for(n=0;n我最终设法解决了这个问题:
我无法仅使用目标机器上可用的shell命令来复制od,因此我创建了一个非常简单的C程序,从二进制文件中读取每个字节并将其打印为可读字符。这包括复制奇怪的XOR,这似乎与基本加密有关(可能)然后,我使用sed提取了我需要的值。在我的Lubuntu机器上为目标CRIS架构交叉编译这个C对于一个简单的程序来说并不太难。

一旦我将模型代码简化为一个最小的可复制示例,一切就变得容易多了。谢谢大家。

有没有一种方法可以使用基本的shell命令而不是使用od来完成这项工作?请具体做什么?代码做什么?它与描述有什么关系?输入是什么(ODOPTS是输入吗?)?输出是什么?从名称
decode
可能是“解码”某个东西。解码是什么?它以什么格式存储?它将数据解码成什么格式?该框上有编译器吗?您可能只想编写一个简短的C程序来完成
od
或perl(什么版本?)的工作?Python?我认为$input_num是智能插件的二进制输出。有一点很有意思,那就是插件是否打开。解码函数获取二进制输出,并生成一个格式化字符串来表示插件是否打开。我也希望这样做,理想情况下只使用shell脚本,但不依赖od。ODOPTS是od命令的选项,我想是在指定octal。没有编译器。我确实可以访问Lubuntu机器,我可以交叉编译,但这不是我以前做过的。那么perl与否?大多数linux机器都有perl。
生成格式化字符串
以什么方式格式化?它打印的所有内容都是
\x$(...)
-一些未知字节。为什么代码执行二进制操作
元素^code
?我在问,因为这看起来像是XY问题-你不关心将文件中的字节转换为八进制数,代码似乎在计算一些真正有趣的输出。如何计算输出?可能有更简单的计算方法。你有没有
awk
sed
?你有没有
bc
?++来发布一些严肃的代码,但是--不要把它归结为一个问题。如果你被这个链接的一般性质绊倒了,那么请阅读、回顾并牢记本页上的内容:。搜索“在询问有问题的代码之前”和“如何将一个糟糕的脚本变成一个好问题”“。祝你好运。恐怕没有awk,但这真的很有帮助,可能会给我一个开始。谢谢你的帮助。我没有正确理解我发布的代码片段,但我认为它只是我需要的固定位置的一点,所以我应该能够保持简单。”。