2017-01-02 15 views
1

Я создал приложение JavaFX для извлечения данных с периферийного устройства FTDI. Я использовал JNAerator для создания API, и все прекрасно работает на моей машине разработки (OS X). Однако при тестировании на ящике колледжа (Windows) метод BirdJ Pointer.getBytes() возвращает массивы байтов, где каждое значение отключено ровно 128.Разница в значениях платформы, использующих значения байтов с использованием JNA

Есть ли известная разница в платформе или что-то еще на Java, что объясняет это непоследовательное поведение или это скорее проблема в родных драйверах FTDI?

Есть ли более чистый способ его устранения, чем введение уродливой логики конкретной платформы для изменения каждого байта, считанного или написанного?

EDIT

Я не уверен, что мое описание проблемы было ясно. Вот конкретный пример.

Я прошу 3 байта от устройства FTDI подтвердить, что он готов к отправке данных. Я получаю [-91, -1, -1], который соответствует документации, говорящей «A5 FF FF». Мой код написан, чтобы принять этот ответ, и все идет хорошо.

Моя коллега получает [37, 127, 127], которая является «25 7F 7F». Поскольку это не ожидаемое значение, мой код сообщает об ошибке и завершает работу.

+1

Байт Java подписан. Если данные вашего устройства не являются 8 битами подписанных данных, вам необходимо подписать-продлить и замаскировать данные, например. 'int value = ((int) mybyte) & 0xFF;' – technomage

+0

или более идиоматический, поскольку java 8: 'Byte.toUnsignedInt (val)' – the8472

+0

Я использую это, когда мне нужно преобразовать значения байтов в hex, но это не решает мою проблему , Я добавил конкретный пример для разъяснения. – Jonathon

ответ

0

Вызов SetDataCharacteristics для обеспечения того, чтобы все слова использовали 8 бит, решили мою проблему.