Tentei pesquisar algo do tipo no forum porem nao achei, entao resolvi criar este topico.
Gostaria de criar uma funçao para converter uma string para um certo tipo de “hexadecimal”, porém deverá ter uma boa perfomace.
Vamo supor que a string que quero converter seja “1234” apos a conversao devera ficar “06 07 08 0a” conforme a tabela abaixo, porem nao sera apenas com numeros, letras e caracteres também e letras maiusculas serao diferentes das minusculas, entao esta tabela abaixo sera bem grandinha, alguem tem alguma ideia de como posso fazer essa funçao ?
0=06
1=07
2=08
3=09
4=0a
5=0b
6=0c
7=0d
8=0e
9=0f
Vini, só por curiosidade, como você faria se fosse necessária a conversão inversa também? Um outro hashmap?
Ou talvez para ficar com o código um pouco mais fácil, seguir a sugestão do Marky.Vasconcelos? Ja que nesse caso de qualquer forma teríamos outro hashmap.
C
Cledison
Eu compreendi ± o que vc passou ViniGodoy. Porem o TABELA.add(‘0’, 0x06); nao é aceito. Algo do tipo TABELA.put(‘0’, 0x06); daria certo ? Como posso substituir?
ViniGodoy
Sim, eu faria um segundo map.
Também seria prudente carregar o valor desses maps de algum arquivo ou banco de dados.
É só trocar add por put mesmo.
ViniGodoy
Na verdade, eu tenho aqui uma classe chamada BidirectionalMap, que no fundo são dois maps, para essas situações.
Rodrigo_Sasaki
É, eu também achei essa ideia muito útil em alguns casos, mas só tem que ter atenção para ter valores únicos dos dois lados, né, senão terá problemas.
ViniGodoy
Não só únicos, mas imutáveis também.
Lembre-se a chave de um Map, ou os valores de um Set, não podem ser alterados, pelo menos, não durante o tempo que ela permanecer na Collection.
Isso porque o HashSet e o HashMap usam o hashCode para encontrar os elementos. Se os objetos mudam e passam a ter um novo hashcode, as coleções se perdem feio.
O mesmo vale para o caso do TreeMap, mas ao invés do hashCode, é o resultado do comparador da coleção que não pode mudar.
Rodrigo_Sasaki
Verdade. Ponto importante.
Preciso fazer algumas alterações na minha versão desse Map, rs.
C
Cledison
private static final Map<Character, Integer> TABELA = new HashMap<>();
Me retorna isso “hex:[I@723d7c” quando deveria retornar 0708090A
Rodrigo_Sasaki
Não exatamente, se você manda imprimir um array, que é um objeto, ele imprime a representação textual do array, definida pelo método toString da classe Object.
Todos os arrays terão um resultado parecido com esse, exceto o array de char, pois o método print da classe PrintWriter tem uma sobrecarga que recebe um char[].
Enfim, para ter o resultado esperado, você precisa iterar pelo array, e imprimir índice a índice.
C
Cledison
mandei exibir posiçao por posiçao, porem se eu passar uma senha “01234” ele me retorna “6 7 8 9 10”, porem preciso que ele retorne “06 07 08 09 0a”… teria alguma forma para eu converter isso para que apareça da forma que eu preciso ? Tentei varias formas aqui porém sem sucesso, primeira vez que estou trabalhando com hashMap…Agradeço a atençao de voces até o momento
ViniGodoy
Converta de Integer para String usando:
Integer.toString(valor,16);
Se quiser exibir com o 0 à esquerda, use o printf.
C
Cledison
Deu certo parcialmente, porem ao invez de aparece 06 aparece apenas 6, nao esta aparecendo o zero antes. Tentei algumas formas mas nao deu certo…
ViniGodoy
Tem gente que pede mastigado mesmo… você chegou a procurar pelo printf que eu falei?
Stringhex=String.format("%02x",valor);
Na pior das hipóteses, dava pra ter feito por “força bruta”: