2016-11-17 2 views
0

Наша команда разрабатывает решение POS для карт NFC на устройствах Ingenico. Что мы используем для чтения карты:Ingenico POS NFC UID неправильная кодировка


/* Open the MIFARE driver */ 
int ClessMifare_OpenDriver (void); 
Return value: OK 

/*Wait until a MIFARE contactless card is detected*/  
int ClessMifare_DetectCardsEx (unsigned char nKindOfCard, unsigned int *pNumOfCards, unsigned int nTimeout); 
Return value: OK 


/*Retrieve the type of the MIFARE card and its UID */ 
int ClessMifare_GetUid (unsigned char nCardIndex, unsigned char *pKindOfCard, unsigned char *pUidLength, unsigned char *pUid); 

Возвращаемое значение:

Paramater2: 
pKindOfCard(Type of cards) 
Card1: CL_B_UNDEFINED 
Card2: CL_B_UNDEFINED 
Card3: CL_B_UNDEFINED 
Card4: CL_MF_CLASSIC 
Paramater4: pUid (UID of the card) 
Card1: "\004Br\302\3278\200" 
Card2: "\004\333\354y\342\002\200" 
Card3: "\004s\247B\344?\201" 
Card4: "\016\310d\301" 

Но в реальной жизни мы ожидаем:

Card1 044272c2d73880 
Card2 0ec864c1 
Card3 0473a742e43f81 
Card4 04dbec79e20280 

От читателей Android NFC мы получаем правильные цифры, но от POS его вполне различный как результат от Ingenico POS. Что нам нужно сделать, чтобы получить это число в шестнадцатеричном формате?

Спасибо!

ответ

2

Вы на самом деле видите здесь правильные UID. Существует только проблема с представлением, которую вы не ожидаете. Возвращаемые значения, которые вы указываете, представляют собой строки C с восьмеричным экранированием для непечатаемых символов. \nnn - это восьмеричное представление байта.

В значении "\004s\247B\344?\201", у вас есть \004, байты значения 0x04, а затем печатаемые символы s, значение 0x73, а затем \247, значение 0xa7 и т.д.

Вы можете преобразовать в шестнадцатеричном для отладки с питоном например:

$ python2 
>>> import binascii 
>>> binascii.b2a_hex("\004Br\302\3278\200") 
'044272c2d73880' 
>>> binascii.b2a_hex("\004\333\354y\342\002\200") 
'04dbec79e20280' 
>>> binascii.b2a_hex("\004s\247B\344?\201") 
'0473a742e43f81' 
>>> binascii.b2a_hex("\016\310d\301") 
'0ec864c1' 

Но в целом данные приведены здесь.

+0

Это работает! Благодаря! –

Смежные вопросы