package Ġm ary k . lib . extensions Ċ Ċ import Ġm ary k . lib . exceptions . ParseException Ċ import Ġkotlin . native . concurrent . Shared Immutable Ċ Ċ const Ġval ĠZERO _ BYTE : ĠByte Ġ= Ġ 0 b 0 Ċ @ Shared Immutable Ċ val ĠHEX _ CHARS Ġ= Ġchar ArrayOf (' 0 ', Ġ' 1 ', Ġ' 2 ', Ġ' 3 ', Ġ' 4 ', Ġ' 5 ', Ġ' 6 ', Ġ' 7 ', Ġ' 8 ', Ġ' 9 ', Ġ' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e ', Ġ' f ') Ċ Ċ /** ĠConverts ĠByteArray Ġinto Ġa ĠString ĠHex Ġvalue Ġ*/ Ċ fun ĠByteArray . to Hex ( skip Leading Zero Bytes : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnum Chars Ġ= Ġsize Ġ* Ġ 2 ĊĊĠĠĠ Ġval Ġstart Pos Ġ= Ġif Ġ( skip Leading Zero Bytes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( this [ index ] Ġ== ĠZERO _ BYTE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġthis . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġindex Ġ* Ġ 2 ĊĠĠĠ Ġ} Ġelse Ġ 0 ĊĊĠĠĠ Ġval ĠcharArray Ġ= ĠChar Array ( num Chars Ġ- Ġstart Pos ) ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġstart Pos Ġuntil Ġnum Chars Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġthis [ i Ġ/ Ġ 2 ]. toInt () ĊĠĠĠĠĠĠĠ ĠcharArray [ i Ġ- Ġstart Pos ] Ġ= ĠHEX _ CHARS [ d Ġshr Ġ 4 Ġand Ġ 0 x 0 F ] ĊĠĠĠĠĠĠĠ ĠcharArray [ i Ġ- Ġstart Pos Ġ+ Ġ 1 ] Ġ= ĠHEX _ CHARS [ d Ġand Ġ 0 x 0 F ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠcharArray . concat ToString () Ċ } Ċ Ċ /** ĠConverts Ġ[ hex ] ĠString Ġinto Ġa ĠByteArray Ġ*/ Ċ fun Ġinit ByteArray By Hex ( hex : ĠString ): ĠByteArray Ġ{ ĊĠĠĠ Ġif Ġ( hex . length Ġ% Ġ 2 Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠParseException (" length Ġis Ġnot Ġa Ġmultiple Ġof Ġ 2 ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġb Ġ= ĠByteArray ( hex . length Ġ/ Ġ 2 ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġhex . length Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ i Ġ/ Ġ 2 ] Ġ= Ġ( hex Char ToInt ( hex [ i ]) Ġshl Ġ 4 Ġor Ġhex Char ToInt ( hex [ i Ġ+ Ġ 1 ])). to Byte () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġb Ċ } Ċ Ċ private Ġfun Ġhex Char ToInt ( ch : ĠChar ) Ġ= Ġwhen Ġ( ch ) Ġ{ ĊĠĠĠ Ġin Ġ' 0 ' .. ' 9 ' Ġ-> Ġch Ġ- Ġ' 0 ' ĊĠĠĠ Ġin Ġ' a ' .. ' f ' Ġ-> Ġch Ġ- Ġ' a ' Ġ+ Ġ 1 0 ĊĠĠĠ Ġin Ġ' A ' .. ' F ' Ġ-> Ġch Ġ- Ġ' A ' Ġ+ Ġ 1 0 ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠParseException (" Invalid Ġhex Ġchar : Ġ$ ch ") Ċ } Ċ