3

私はこの作品を完成させるのに本当に苦労しています。考えや指針があればとても助かります。これが私の問題です:

  1. 私はISO 8583レイヤーに取り組んでおり、データ要素 32 は n ..11 として定義されています。これは、要素が数値であり、最大サイズが 11 の可変長であることを意味します。

  2. これは (ASCII ではなく) バイナリ形式で送信する必要があります。

  3. LLNN を表示する必要があります。ex ISO バイナリ raw は次のようになります: 11 06 01 04 00 00 00

これまで、BCD(06 01 04 00 00 00) で 6 の (11/2)+(11%2) サイズの byte[] 配列を完全に埋めることができました。そして、フィールドの全長を 11 として計算しました。これを byte[0] に挿入する必要がありますbyte[]。11 は 0B ではありません。つまり、 0001 0001 は 11 として1 バイトにパックされています。 (BCD ISO の最初の 255 文字) 長さフィールド値を 0b 01 04 00 00 00 として挿入するか、nBytes を 2 として渡すと、00 0b 04 00 00 00 が返されます。右シフト ロジックで問題が発生しています。 .

誰かが私を助けて、以下のロジックを修正して、結果を 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);
4

2 に答える 2

0

この関数は、探している BCD 変換を実行すると思います。

class T {
    public static byte toBCD(int n)
    {
        // a*10 + b -> a*16 + b;
        byte a = (byte)(n / 10);
        byte b = (byte)(n % 10);

        return (byte) (a * 0x10 + b);
    }

    public static void main(String[] args)
    {
        assert(toBCD(11) == 0x11);
        assert(toBCD(28) == 0x28);
    }
}
于 2012-12-14T00:38:42.867 に答える