2017-01-02 76 views
1

我創建了一個JavaFX應用程序來從FTDI外圍設備檢索數據。我使用JNAerator來生成API,並且在我的開發機器(OS X)上一切都很好。但是,當在同事的盒子(Windows)上測試時,BirdJ Pointer.getBytes()方法返回的字節數組中的每個值都精確爲128.使用JNA讀取字節值的平臺差異

是否存在已知的平臺差異或Java中的其他內容這種不一致的行爲或者更可能是本地FTDI驅動程序中的問題?

是否有一種更清晰的方法來解決它比引入醜陋的平臺特定的邏輯來修改每個字節的讀取或寫入?

編輯

我不確定我的問題描述是否清楚。這是一個具體的例子。

我向FTDI設備請求3個字節以確認它已準備好發送數據。我得到[-91,-1,-1],它與文檔中預期的「A5 FF FF」匹配。我的代碼被寫入接受這個答案,一切進展得很好。

我的同事得到[37,127,127]即「25 7F 7F」。由於這不是預期值,我的代碼會報告錯誤並退出。

+1

Java字節已簽名。如果您的設備數據不是8位已簽名數據,則需要對數據進行簽名擴展和屏蔽。 'int value =((int)mybyte)& 0xFF;' – technomage

+0

or more idiomatic since java 8:'Byte.toUnsignedInt(val)' – the8472

+0

我使用的是當我需要將字節值轉換爲十六進制,但它不能解決我的問題。我添加了一個具體的例子來澄清。 – Jonathon

回答

0

調用SetDataCharacteristics以確保所有單詞使用8位解決了我的問題。