Bonjour tout le monde,
Voici un code qui prend un nombre long et et le fragmente par couple de 7 bits
et place ces 7 bits dans des payloads avec le bit (continue) tout à gauche dans un octet qui commence par 1
sauf le dernier qui commence par 0. Mais je ne comprends pas bien le code.
- (max << 7) |0x7fL >> décale de 7 bits vers la gauche mais le reste ???
>>> décale de x bits à droite en insérant des 0 à gauche
mais je ne comprends pas bien ce que fait value >>> (i*7) ??
(int)((temp | 0x80) & 0xff) je ne comprends pas non plus 0x80 et 0xff quel est l'effet ??...
Pouvez vous m'aider à comprendre le code merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 static private final int SHORT_INTEGER_MAX = 127; protected void appendUintvarInteger(long value, DataOutputStream f) { /* * To encode a large unsigned integer, split it into 7-bit fragments * and place them in the payloads of multiple octets. The most significant * bits are placed in the first octets with the least significant bits * ending up in the last octet. All octets MUST set the Continue bit to 1 * except the last octet, which MUST set the Continue bit to 0. */ int i; long max = SHORT_INTEGER_MAX; for (i = 0; i < 5; i++) { if (value < max) { break; } max = (max << 7) | 0x7fl; } while(i > 0) { long temp = value >>> (i * 7); temp = temp & 0x7f; append((int)((temp | 0x80) & 0xff), f); i--; } append((int)(value & 0x7f), f); }
Partager