J'ai du mal à comprendre ce qui se passe dans les deux lignes avec le 0xFF7F et celui qui se trouve en dessous. Il y a un lien ici qui l'explique dans une certaine mesure. http://www.herongyang.com/java/Bit-String-Set-Bit-to-Byte-Array.html Je ne sais pas si 0xFF7F >> POSBIT) & oldByte) & 0x00FF sont censés être 3 valeurs « ensemble ou comment associées par ce qui est censé être lu. Si quelqu'un peut clarifier un peu mieux ce qui se passe ici, je l'apprécierais grandement.Méthode setBit java utilisant le décalage binaire et le code hexadécimal - question
private static void setBit(byte[] data,
final int pos,
final int val) {
int posByte = pos/8;
int posBit = pos%8;
byte oldByte = data[posByte];
oldByte = (byte) (((0xFF7F>>posBit) & oldByte) & 0x00FF);
byte newByte = (byte) ((val<<(8-(posBit+1))) | oldByte);
data[posByte] = newByte;
}
passé dans ce procédé en tant que paramètres à partir d'un procédé de selectBits était SetBit (out, i, val); Out = octet [] out = nouvel octet [numOfBytes]; (numOfBytes peut être 7 dans cette situation) i = qui est le numéro [57], le numéro d'origine du tableau PC1 int contenant les 56 entiers. val = qui est le bit extrait du tableau d'octets de la méthode getBit().
Quelle est la signification des nombres hexadécimaux cependant? Pourquoi 0xFF7F et 0x00FF ont-ils été choisis dans ce cas? –
Ils sont _masks_, ils sont utilisés avec l'opérateur AND pour sélectionner seulement quelques bits. Dans le premier cas, 0xFF7F est utilisé parce que vous voulez définir un bit spécifié de sorte que vous ayez tous les 1 sauf celui avec lequel vous voulez travailler (qui est décalé selon __pos__). Alors que 0x00FF est utilisé pour sélectionner seulement l'octet le plus bas d'une paire d'octets, puisqu'il sélectionne seulement les 8 bits inférieurs. – Jack