Оба значения (3853004524 и 23646168229) по сути являются одним и тем же значением идентификатора. Причина, по которой вы получаете такое странное значение из своего приложения, заключается в том, что вы используете довольно странный метод преобразования для преобразования байтового массива в строку.
Давайте сначала посмотрим на значение 3853004524, которое вы получаете от считывателя RFID на вашем ПК. Кажется, это десятичное представление идентификатора карты. Чтобы лучше соответствовать тому, что вы получаете в Android, давайте преобразуем его в шестнадцатеричное представление: 0xE5A82EEC. Это может быть действительный 4-байтовый UID (как он используется, например, в NFC-A).
Давайте теперь посмотрим на вашу довольно странную функцию преобразования:
private String byteArrayToDecimal(byte[] barray) {
String result="";
for (byte b : barray) {
result = result + (b & 0xff);
}
return result;
}
Этот метод берет каждый байт из входного байтового массива, преобразует его в беззнаковое десятичное целое число и добавляет десятичное представление к строке. Если мы попробуем это с идентификатором карты, который вы получите на своем ПК, это приведет к:
- 0xE5 получает «229»
- 0xA8 получает «168»
- 0x2E получает "46"
- 0xEC получает "236"
Когда вы посмотрите на значение, которое вы получили в своем приложении, вы поймете, что все эти десятичные числа объединяются в вашем результате. Более того, вы увидите, что все числа были объединены в обратном порядке. Это означает, что байтовый массив, который вы получили из intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)
, был
{ (byte)0xEC, (byte)0x2E, (byte)0xA8, (byte)0xE5 }
Чтобы преобразовать это значение в значение, которое печатает ваше приложение для ПК, вы можете использовать что-то вроде этого:
private String byteArrayToDecimal(byte[] barray) {
if (barray == null) return "";
long result = 0;
for (int i = barray.length - 1; i >= 0; --i) {
result <<= 8;
result |= barray[i] & 0x0FF;
}
return Long.toString(result);
}