Расшифровка данных с кард-ридера
Я пытаюсь установить связь с USB-аксессуаром (считыватель карт с магнитной полосой, модель-E-Seek M250), а Nexus 7 выступает в качестве USBHost.
Сценарий использования: при считывании карты мне нужно получить подробные данные с карты и преобразовать ее в читаемый пользователем формат.
Мне удалось успешно получить устройство, его интерфейс и конечную точку ввода. После этого я собираюсь получить данные:
int receivedBytes = mConnection.bulkTransfer(usbEndpointIN, readBytes, readBytes.length, 3000);
if (receivedBytes > 2) {
dataString = new String(readBytes);
Log.v(Util.TAG, " :: Received Byte Count ::" + receivedBytes);
Log.v(Util.TAG, " :: Final Value Bytes" + readBytes);
Log.v(Util.TAG, " :: Final Value String" + dataString);
}
После нескольких попыток я не смог найти способ получить данные в удобочитаемом для пользователя формате, ниже приведен способ отображения данных в журналах.
Кто-нибудь может дать мне знать, как преобразовать эти данные в читаемый пользователем формат?
1 ответ
Этот читатель не зашифрован, так что, вероятно, это проблема кодирования. Проверьте документацию для читателя, чтобы увидеть, какой тип кодировки они используют для данных карты, и используйте эту кодировку, когда передаете байтовый массив к нему. Ниже приведен пример использования UTF-8.
int receivedBytes = mConnection.bulkTransfer(usbEndpointIN, readBytes, readBytes.length, 3000);
if (receivedBytes > 2) {
String dataString = null;
Log.v(Util.TAG, " :: Received Byte Count ::" + receivedBytes);
Log.v(Util.TAG, " :: Final Value Bytes" + readBytes);
try {
dataString = new String( readBytes, "UTF-8");
Log.v(Util.TAG, " :: Final Value String" + dataString);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}