Eu sei que para gerar valores aleatorios eu uso o Math.random(), porem ele gera somente numeros( double), mas sei trata-los para inteiro.
O que eu quero e preciso fazer é gerar uma sequencia de 16 “bitys” que podem contem Letra e numeros.
alguem sabe como fazer? ou ja tem pronta?
Ps:
O modo como pensei foi gerar um conjunto(vetor) de 8 numeros e um outro conjunto(vetor) de 8 numeros.
depois dentro de um for, mistura-se as posições dos dois vetores, porem acho isso muito trabalhoso e que nao vai dar uma sequencia a mais misturada possivel.
Cara, até tenho uma idéia do que possa dar certo, mas tem dois problemas que se resumem em um só.
1- Você teria que usar os valores da tabela ASCII pra fazer isso
2- Pra usar esses valores teria que rolar um “hard codezinho” de leve.
O problema desse hard code é que se a tabela mudar você teria que mudar seu método também… Compreende o drama?
Além disso a forma que pensei pode gerar um overhead pequeno, mas pode.
Mesmo assim vou colocar aqui o que to pensando e você vê se te resolve…
[code]
public class Exemplo1{
public static void main(String[] args){
String s; //String a ser impressa
StringBuffer sb = new StringBuffer(); //StringBuffer para o append
int qtdChars = 1; //Qtd de chars na String
while(qtdChars <= 16){ //String tem que ter 16 chars
int charInt = (int) (Math.random() * 71); //Random para gerar um número aleatório até 70
//70, porque na tabela ASCII o maior caracter que será necessário é o de nro 70 (F)
if(((charInt >= 48) && (charInt <= 57)) || ((charInt >= 65) && (charInt <= 70))){
//Chars de 48 a 57 são os números
//Chars de 65 a 70 são: A, B, C, D, F
char c = (char) charInt; //Gerando um caracter de acordo com o ASCII gerado pelo random
sb.append(c); //Adiciona o char gerado no StringBuffer
qtdChars++; //Incremente nro de chars no String
}
}
s = sb.toString(); //String recebe o StringBuffer que tem a sentença de 16 bytes nesse momento
System.out.println(s); //Imprime o String com o resultado
}
}[/code]
Tá aí, cara, foi o que consegui pensar…
Espero que te ajude de alguma forma…
Que exagero. Desse modo você está gerando 4 bits por vez, para chegar a 16 bytes, ou 128 bits você precisa executar essa operação 32 vezes, e nem sempre esse random vai cair entre os chars [0-9A-F].
Bruno, concordo com tudo que disse.
Principalmente o exageiro.
Tanto que coloquei os pontos negativos além do overhead que ele gera, mas o cara queria uma solução e a dei pra ele.
Pra achar os 16 bytes pode ser que o while rode 16 vezes ou pode ser que ele rode milhões de vezes…
Grande rafaeldiego,
Não sei se foi um deboche o seu comentário, mas caso tenha sido porque você não coloca aí um post com a resolução do problema do gpd38?
[code]String s = “0123456789ABCDEF0123456789abcdef”;
long long1 = Long.parseLong(s.substring(0, 15), 16);
long long2 = Long.parseLong(s.substring(16, 32), 16);[/code]Obs: Estou fazendo isso de cabeça, pode estar errado.
Edit 1: Faltou um ponto-e-virgula.
Edit 2: Estava genérico demais, não necessitava realizar calculos em cima do tamanho da string.
Sim, dá pra fazer. Gere um número inteiro entre [0,15], pegue um dos caracteres desse array baseado na posição gerada, concatene na string. Repita quantas vezes quiser.