2017-01-02 73 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位解决了我的问题。