La conversion d'une décimale zonée en comp-3 est assez simple: inversez les grignotements de l'octet faible et supprimez le grignotement élevé de tous les autres octets. Considérons le numéro 12345 - en notation décimale condensée, qui serait un x'12345C 'ou x'12345F' (les deux C et F sont +, A B et D sont -). Lorsque vous l'avez converti en décimal zoné, vous avez inversé le grignotage bas et inséré un "F" dans le grignotement haut entre chaque chiffre. En le transformant en x'F1F2F3F4C5 '.
Pour le reconvertir, il vous suffit d'inverser le processus. En utilisant java, qui ressemblerait à ceci:
byte[] myDecimal = { 0xF1, 0xF2, 0xF3, 0xF4, 0xF5 };
byte[] myPacked = new byte[3];
//Even low nibble moved to high nibble and merged with odd low nibble
myPacked[0] = ((myDecimal[0] & 0b00001111) << 4)) | (myDecimal[1] & 0b00001111);
myPacked[1] = ((myDecimal[2] & 0b00001111) << 4)) | (myDecimal[3] & 0b00001111);
//Last byte gets filpped for sign
myPacked[2] = ((myDecimal[5] & 0b00001111) << 4)) | (myDecimal[4] & 0b00001111);
Ummm ... Si vous réussissez à convertir COMP-3 en décimal, qu'est-ce qui vous empêche d'inverser le processus pour une conversion décimale en COMP-3? – NealB
Pourquoi est-ce difficile? Prenez les 4 bits inférieurs des chiffres non-signés, mettez-les ensemble avec des décalages et des opérations au niveau des bits, et fixez l'indicateur de signe approprié à la fin. Prends un coup de couteau, alors si tu as des problèmes, reviens ici et pose-toi des questions à leur sujet. Ou écrivez-le en ASCII ou EBCDIC et écrivez le traducteur en COBOL. –
@David, pouvez-vous mettre plus de lumière sur l'écriture d'un traducteur COBOL? Parce que mon code sera en. NET et si possible pouvez-vous me donner les détails de la conversion de la sortie en format EBCDIC? –