Preciso formatar cada resultado (no caso de uma chave MD5) num String Hexa. O caso é que o Integer.toHexString() devolve o valor mas não formatado em duas casas. Então, um valor menor a 16, como “5” devolver “5” e não “05”.
Implementei um workaround (tá bom, fiz nas coxas) que ficou assim:
sendo byteDigest[idx] um byte de um vetor de bytes, é claro.
Como NumberFormat ou DecimalFormat não aceitam valores não numéricos, e o Integer.toHexString() também faz a mesma coisa que o toString com ‘radix’, como formatar um hexa sempre com dois algarismos ?
Alguém conhece outra solução mais bela que o meu workaround ?
8)
Uma outra forma que às vezes uso é a seguinte: eu sei que se eu fizer um “OR” de um byte com 0x100 e converter para hexa, vou ter alguma coisa entre “100” e “1FF”. Portanto, basta pegar os últimos 2 dígitos:
Em C normalmente uso o sprintf ("%02X"), em vez de usar essa maluquice de “Integer.toHexString ((b & 0xFF) | 0x100).substring(1)” que mostrei acima. Nem tinha lembrado disso (embora, como disse, eu seja muito neurótico com desempenho - só iria usar String.format ("%02X") se fosse alguma coisa que fosse pouco usada.
jcatino
dudaskank:
E ainda existe uma das melhores coisas do java5: printf!
Pois é, também estava esperando faz tempo printf e varargs !