2016-11-17 5 views
0

저희 팀은 Ingenico 기기에서 NFC 카드 용 POS 솔루션을 개발합니다. 우리는 카드를 읽는 데 사용할 무엇 :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" 

그러나 실제 생활에서 우리가 기대를 :

안드로이드 NFC 리더에서
Card1 044272c2d73880 
Card2 0ec864c1 
Card3 0473a742e43f81 
Card4 04dbec79e20280 

우리는 정확한 번호를 얻지 만, Ingenico POS의 출력과 다릅니다. 이 숫자를 16 진수로 사용하려면 어떻게해야합니까?

감사합니다.

답변

2

실제로 여기에 올바른 UID가 표시됩니다. 기대하지 않는 표현에 불과합니다. 인용 부호가있는 반환 값은 인쇄 할 수없는 문자에 대한 8 진수 이스케이프 문자 인 C 문자열입니다. \nnn은 1 바이트의 8 진 표현입니다. 값 "\004s\247B\344?\201"에서

, 당신은 \247 다음 값에는 0x73의 인쇄 가능한 문자 s,,, 값 0xa7 등 뒤에 \004, 값은 0x04의 바이트를 가지고

당신은 파이썬과 디버깅을 위해 16 진수로 변환 할 수 있습니다

예 :

$ 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

작동합니다! 감사! –