我真的很努力地完成這件作品,任何想法或指針都會幫助我很多。這是我的問題:在位置0插入字節並向右移動剩餘的數據位
我正在ISO 8583層和數據元件32被定義爲n ..11,這意味着該元素是數字,具有最大尺寸爲11
和可變長度這需要以二進制格式(不是ASCII)發送。
我們需要顯示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);
爲什麼你有點偏移?難道你不能只創建發送ISO 8583消息所需的字節嗎?添加一個包含11位十六進制或17位十進制數的字節,並將其添加到其他字節。 –
@Gilbert:感謝你找回吉爾伯特,我可以想到避免多個數組對象的創作......如果右移可以保持謹慎,那麼這將是更大的...我已經基於你的輸入實現瞭解決方案......只是檢查主機端看到它會正確解碼...我會盡快更新你的新修補程序如何去.. – pathfinder
@吉爾伯特:十進制方式17在ISO系統上完美工作....謝謝你的想法.. – pathfinder