0
如何从shell中计算位选择?
Unix shell位select
想我已经得到的东西,如:i[m:l]
i
是一个整数,m
是位的MSB部分选择和l
是比特的LSB部分选择,如:
250[1:0]
- 将返回“250”的2个LSB位,答案将为“2”250[7:2]
- 将返回“250”的6个MSB位,并且答案将是“62”
如何从shell中计算位选择?
Unix shell位select
想我已经得到的东西,如:i[m:l]
i
是一个整数,m
是位的MSB部分选择和l
是比特的LSB部分选择,如:
250[1:0]
- 将返回“250”的2个LSB位,答案将为“2”250[7:2]
- 将返回“250”的6个MSB位,并且答案将是“62”不知道这是多么便携,但Bash和KSH至少支持按位运算(左&右移,按位AND和OR)和指数运算。所以你可以直接使用它们来做掩码。
#! /bin/sh
extract_bits() {
msb=$1 ; lsb=$2 ; num=$3
# Number of bits required
len=$(($msb + 1 - $lsb))
# Bitmask == 2^len - 1
mask=$((2 ** $len - 1))
# Left-shift mask, bitand, right-shift result
echo $(((num & ($mask << $lsb)) >> $lsb))
}
extract_bits 1 0 250
extract_bits 7 2 250
(至于是否是一个好主意,做这在所有的shell脚本,好了,我不相信。)