我使用下面的代码来获取值并将它们转换为两个补码。我试过两次FF&两个富裕。如何将它放在一个字符串中,以便结果返回-1,-2而不是逐行?
twos() { x=$((16#$1)); [ "$x" -gt 128 ] && ((x=x-256)); echo "$x"; }
现在:
$ twos FF
-1
$ twos FE
-2
$ twos 01
1
答案 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