gpt4 book ai didi

linux - bash中十六进制到十进制的转换

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:36 24 4
gpt4 key购买 nike

我在互联网上查找了我的问题,但找不到答案。如果之前已经回答过的话,我们深表歉意。这是针对 bash 的。

所以我的脚本将读取 input.dat 文件并查找行并根据它进行算术运算。示例:

#input.dat file:
205 - 12
0xFED - 0xABCD

使用代码 echo $((p)) 其中 p 是循环计数(帮助我计算和打印每一行),但 0xFED - 0xABCD 返回 -39904 ,但我希望它返回其十六进制对应项。

./test.sh input.dat

while read p; do
echo $((p))
done <$1

返回:

193
-39905

但如果计算是对十六进制值进行的,我希望它返回十六进制结果而不是十进制。

欢迎任何想法!

最佳答案

使用printf指定如何打印输出。对于十六进制表示,您可以使用 %x printf 修饰符,对于十进制表示,您可以使用 %d printf 修饰符。

请勿复制下面的代码,它会尝试删除您驱动器上的所有文件。下面代码中的注释:

# for each line in input
# with leading and trailing whitespaces removed
while IFS=$' \r\n' read -r line; do

# ADD HERE: tokenization of line
# checking if it's valid and safe arithmetic expression

# run the arithemetical expansion on the line fetching the result
# this is extremely unsafe, equal to evil eval
if ! res=$((line)); then
echo "Arithmetical expansion on '$p' failed!"
exit 1
fi

# check if the line starts with `0x`
# leading whitespaces are removed, so we can just strip the leading two character
if [ "${p:0:2}" == "0x" ]; then
# if it does print the result as a hexadecimal
printf "%x\n" "$res"
else
printf "%d\n" "$res"
fi

# use heredoc for testing input
done <<EOF
205 - 12
0xFED - 0xABCD
0 $(echo "I can run any malicious command from here! Let's remove all your files!" >&2; echo rm -rf / )
EOF

关于linux - bash中十六进制到十进制的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com