如何在bash命令中使用十六进制数

问题描述 投票:0回答:2

我可以看到很多地方解释如何在打印出来时如何在十六进制数和十进制数之间进行转换。我不想打印它,我想在命令中使用十六进制值。

currentAdress=$((0x$currentAdress + 8))
# read the max_payload
maxPayloadCmd="sudo /sbin/setpci -d $vendorId:$deviceId $currentAdress.B"
maxPayload=`eval $maxPayloadCmd`

currentAdress的值是00FF范围内的一个字符串

当我打印maxPayloadCmd时,我可以看到我有小数值,而不是hexvalue

我该如何解决这个问题?

bash hex
2个回答
2
投票

您可以使用printf%x以十六进制格式打印值。

maxPayloadCmd="sudo /sbin/setpci -d $vendorId:$deviceId $(printf '%02x.B' $currentAdress)"

顺便说一下,将命令存储在函数而不是变量中更自然。你应该avoid eval一般。

maxPayload() {
    sudo /sbin/setpci -d "$vendorId:$deviceId" "$(printf '%02x.B' "$currentAdress")"
}
# Call the function the same as any other command.
maxPayload

1
投票

这可能取决于您打印变量的方式:

$ currentAdress=2
$ currentAdress=$((0x$currentAdress + 8))
$ printf "%d\n" $currentAdress
10
$ printf "%x\n" $currentAdress
a
© www.soinside.com 2019 - 2024. All rights reserved.