2013-03-03 64 views
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”

回答

2

不知道这是多么便携,但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脚本,好了,我不相信。)