J'ai vraiment du mal à terminer cette pièce, toute réflexion ou indication m'aiderait beaucoup. Voici mon problème :
-
Je travaille sur ISO 8583 et l'élément de données 32 est défini comme n ..11, ce qui signifie que l'élément est numérique, de longueur variable avec une taille maximale de 11.
-
et ces données doivent être envoyées en format binaire (et non ASCII).
-
Nous devons montrer LLNN, ex ISO binary raw devrait ressembler à ceci : 11 06 01 04 00 00 00
Jusqu'à présent, j'ai pu remplir le tableau byte[] avec (11/2)+(11%2) taille de 6 avec BCD(06 01 04 00 00 00). et j'ai obtenu la longueur totale du champ calculée comme 11, Maintenant j'ai besoin d'insérer ceci à byte[0] avec le 11 pas 0B i.e 0001 0001 emballé à un octet. byte[]
Comme 11, ma logique est la suivante : lorsque je donne nBytes=1 (255 premiers caractères dans BCD ISO), il insère la valeur du champ longueur soit 0b 01 04 00 00 00 ou si je passe nBytes à 2, il donne 00 0b 04 00 00 00. Il y a quelque chose qui ne va pas avec la logique de décalage vers la droite...
Quelqu'un peut-il m'aider à corriger la logique ci-dessous pour que les résultats soient 11 06 01 04 00 00 00 ?
int nBytes=1;
for (int i = nBytes - 1; i >= 0; i--) {
buf[i] = (byte)(length & 0xFF);
length >>= 8;
}
outstream.write(buf);