package Ġcom . nam nh . nf che l per Ċ Ċ object ĠUtils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild ĠAP DU Ġfor ĠSELECT ĠA ID Ġcommand . ĠThis Ġcommand Ġindicates Ġwhich Ġservice Ġa Ġreader Ġis ĊĠĠĠĠ Ġ* Ġinterested Ġin Ġcommunic ating Ġwith . ĠSee ĠISO Ġ 7 8 1 6 - 4 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaid ĠApplication ĠID Ġ( A ID ) Ġto Ġselect ĊĠĠĠĠ Ġ* Ġ@ return ĠAP DU Ġfor ĠSELECT ĠA ID Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Select Ap du ( aid : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFormat : Ġ[ CLASS Ġ| ĠIN STR UCTION Ġ| ĠPARAMETER Ġ 1 Ġ| ĠPARAMETER Ġ 2 Ġ| ĠLEN GTH Ġ| ĠDATA ] ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠConstants . SELECT _ AP DU _ HEADER Ġ+ ĠString . format ("% 0 2 X ", Ġaid . length Ġ/ Ġ 2 ) Ġ+ Ġaid ĊĠĠĠĠĠĠĠ Ġreturn Ġhex StringTo ByteArray ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġclass Ġto Ġconvert Ġa Ġhexadecimal Ġstring Ġto Ġa Ġbyte Ġstring . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > Behavior Ġwith Ġinput Ġstrings Ġcontaining Ġnon - hex adecimal Ġcharacters Ġis Ġundefined . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstr ĠString Ġcontaining Ġhexadecimal Ġcharacters Ġto Ġconvert ĊĠĠĠĠ Ġ* Ġ@ return ĠByte Ġarray Ġgenerated Ġfrom Ġinput ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhex StringTo ByteArray ( str : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġstr . length ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( len Ġ/ Ġ 2 ) Ġ// ĠAllocate Ġ 1 Ġbyte Ġper Ġ 2 Ġhex Ġcharacters ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġeach Ġcharacter Ġinto Ġa Ġinteger Ġ( base - 1 6 ), Ġthen Ġbit - shift Ġinto Ġplace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i Ġ/ Ġ 2 ] Ġ= Ġ(( Character . digit ( str [ i ], Ġ 1 6 ) Ġshl Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠCharacter . digit ( str [ i Ġ+ Ġ 1 ], Ġ 1 6 )). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġclass Ġto Ġconvert Ġa Ġbyte Ġarray Ġto Ġa Ġhexadecimal Ġstring . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes ĠBytes Ġto Ġconvert ĊĠĠĠĠ Ġ* Ġ@ return ĠString , Ġcontaining Ġhexadecimal Ġrepresentation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠbyteArray To HexString ( bytes : ĠByteArray ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhex Array Ġ= Ġchar ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' 0 ', Ġ' 1 ', Ġ' 2 ', Ġ' 3 ', Ġ' 4 ', Ġ' 5 ', Ġ' 6 ', Ġ' 7 ', Ġ' 8 ', Ġ' 9 ', ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ', Ġ' B ', Ġ' C ', Ġ' D ', Ġ' E ', Ġ' F ' ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġhex Chars Ġ= ĠChar Array ( bytes . size Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġvar Ġv : ĠInt ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġbytes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġbytes [ j ]. toInt () Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhex Chars [ j Ġ* Ġ 2 ] Ġ= Ġhex Array [ v . ush r ( 4 )] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhex Chars [ j Ġ* Ġ 2 Ġ+ Ġ 1 ] Ġ= Ġhex Array [ v Ġand Ġ 0 x 0 F ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( hex Chars ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġconcatenate Ġtwo Ġbyte Ġarrays . ĊĠĠĠĠ Ġ* Ġ@ param Ġfirst ĠFirst Ġarray ĊĠĠĠĠ Ġ* Ġ@ param Ġrest ĠAny Ġremaining Ġarrays ĊĠĠĠĠ Ġ* Ġ@ return ĠConcat en ated Ġcopy Ġof Ġinput Ġarrays ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconcat Arrays ( first : ĠByteArray , Ġvar arg Ġrest : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Length Ġ= Ġfirst . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( array Ġin Ġrest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Length Ġ+= Ġarray . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfirst . copyOf ( total Length ) ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġfirst . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( array Ġin Ġrest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġresult , Ġoffset , Ġarray . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġarray . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }