转换Twos补充结果在一行而不是逐行,怎么样?

时间:2015-08-04 07:59:26

标签: bash hex twos-complement

我使用下面的代码来获取值并将它们转换为两个补码。我试过两次FF&两个富裕。如何将它放在一个字符串中,以便结果返回-1,-2而不是逐行?

twos() { x=$((16#$1)); [ "$x" -gt 128 ] && ((x=x-256)); echo "$x"; }

现在:

$ twos FF
-1
$ twos FE
-2
 $ twos 01
1

2 个答案:

答案 0 :(得分:0)

正如@choroba所评论的那样,an answer提供(几乎)你需要的代码。

我仍然在回答这个问题,因为这个问题实际上包含两个问题,即计算两个补码并多次执行。如果您将这两个问题分开而不是复制代码,您也可以以相同的方式多次执行其他计算:

# execute a command for each argument provided,
# concatenating output with ", " 
# $1 ....... command
# $2 - $n .. command arguments
multi() {
    cmd="$1"
    shift
    for arg in $@
    do
        "$cmd" "$arg"
    done | xargs | sed 's/ /, /g'
}

用法:

multi twos FF FE AB 01
-1, -2, -85, 1

答案 1 :(得分:0)

更新我的previous answer以添加逗号,让我们创建函数:

$ twosx() (c=; for x in "$@"; do x=$((16#$x)); [ "$x" -gt 127 ] && ((x=x-256)); printf "%s%s" "$c" "$x"; c=", "; done; echo ""; )

使用示例:

$ twosx 00
0
$ twosx 00 01 7F 80 FE FF
0, 1, 127, -128, -2, -1