加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

与bc bash的力量的力量

发布时间:2020-12-15 22:04:36 所属栏目:安全 来源:网络整理
导读:我想计算一下: 0x0404cb * 2**(8*(0x1b - 3)) 以十进制表示的是: 263371*2^^(8*(27-3)) 使用|公元前. 我试过了 echo 263371*2^^(8*(27-3)) | bcexpr 263371*2^^(8*(27-3)) | bczsh: no matches found: 263371*2^^(8*(27-3)) 或尝试解决此问题 238348 * 2^1
我想计算一下:

0x0404cb * 2**(8*(0x1b - 3))

以十进制表示的是:

263371*2^^(8*(27-3))

使用|公元前.

我试过了

echo 263371*2^^(8*(27-3)) | bc
expr 263371*2^^(8*(27-3)) | bc
zsh: no matches found: 263371*2^^(8*(27-3))

或尝试解决此问题

238348 * 2^176^

我可以一次解决吗?

解决方法

bc“权力”运算符是^.您还必须引用所有内容以防止shell尝试执行历史替换和路径名扩展或将括号解释为子shell这样的操作:

$bc <<< '263371*2^(8*(27-3))'
1653206561150525499452195696179626311675293455763937233695932416

如果要从头开始处理初始表达式,可以使用ibase特殊变量将输入设置为十六进制并进行一些额外处理:

eqn='0x0404cb * 2**(8*(0x1b - 3))'

# Replace "**" with "^"
eqn=${eqn//**/^}

# Remove all "0x" prefixes
eqn=${eqn//0x}

# Set ibase to 16 and uppercase the equation
bc <<< "ibase = 16; ${eqn^^}"

或者,而不是使用参数扩展,使用(GNU)sed更紧凑,更易读:

sed 's/**/^/g;s/0x//g;s/.*/U&/;s/^/ibase = 16; /' <<< "$eqn" | bc

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读