8
votes

Obtenir une valeur de bit spécifique dans une chaîne d'octet

Il y a un octet à un indice spécifique dans une chaîne d'octets qui représente huit drapeaux; un drapeau par bit dans l'octet. Si un drapeau est défini, son bit correspondant est 1, sinon son 0. Par exemple, si j'ai

0001 0101    # Three flags are set at indexes 0, 2 and 4
             # and the others are not set


0 commentaires

4 Réponses :


3
votes

Spécifier les masques de bits (lire à propos de Masques de bits sur Wikipedia ):

if(flags & FLAG_1) { # bit 0 is set, example: 0001 0101 & 0000 0001 = 0000 0001

}
if(flags & FLAG_2) { # bit 1 is set, example: 0001 0101 & 000 0010 = 0000 0000

}
...


0 commentaires

7
votes

x & 1, x & 2, x & 4, x & 8, etc

Si ceux-ci sont> 0, le bit 1,2,3,4, etc est défini


0 commentaires

32
votes

Typiquement, le bit le moins significatif est index de bit 0 et le bit le plus significatif est l'index de bit 7. Utilisation de cette terminologie, nous pouvons déterminer si l'index de bit K est défini en prenant le bitwise-et avec 1 décalé à gauche par k. Si le bit et est non nul, cela signifie que l'indice K a un 1; Sinon, l'index k a un 0. SO:

def get_bit(byteval,idx):
    return ((byteval&(1<<idx))!=0);


1 commentaires

Merci pour la réponse informative, cela a beaucoup de sens. Et vous avez réellement raison, le bit le moins significatif est à l'index 0 dans ce cas.



0
votes

La fonction serait: xxx


0 commentaires