2012-12-11 46 views
3

我真的很努力地完成這件作品,任何想法或指針都會幫助我很多。這是我的問題:在位置0插入字節並向右移動剩餘的數據位

  1. 我正在ISO 8583層和數據元件32被定義爲n ..11,這意味着該元素是數字,具有最大尺寸爲11

  2. 和可變長度這需要以二進制格式(不是ASCII)發送。

  3. 我們需要顯示LLNN,前ISO二進制原始應該是這樣的:11 06 01 04 00 00 00

直到現在我才得以完成填充的byte []數組(11/2)+(11%2)大小爲6的BCD(06 01 04 00 00 00)。我得到的字段的總長度計算爲11,現在我需要插入這在字節[0]與11不是0B即0001 0001打包到一個字節byte[]爲11,我的邏輯如下所示,當我給nBytes = 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); 
+0

爲什麼你有點偏移?難道你不能只創建發送ISO 8583消息所需的字節嗎?添加一個包含11位十六進制或17位十進制數的字節,並將其添加到其他字節。 –

+0

@Gilbert:感謝你找回吉爾伯特,我可以想到避免多個數組對象的創作......如果右移可以保持謹慎,那麼這將是更大的...我已經基於你的輸入實現瞭解決方案......只是檢查主機端看到它會正確解碼...我會盡快更新你的新修補程序如何去.. – pathfinder

+0

@吉爾伯特:十進制方式17在ISO系統上完美工作....謝謝你的想法.. – pathfinder

回答

0

我終於結束了使用兩個字節數組對象。一個保存原始請求並以十進制計算字段的長度並將其放入第一位置,即第二字節數組的第0位索引,並將原始字節數組附加到該位置。

0

我想this function執行你正在尋找的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); 
    } 
}