Ola mais uma vez. Procurei sobre Float32 aqui no forum e nao encontrei nada… Eu tenho que transformar um numero dado pelo usuario (String -> Float32), converter para binario, dividir de 8 em 8 e tranformar cada grupo de 8 bits em hexa
De momento estou usando o seguinte codigo
Float fl = new Float(vOholdoff.getText()) ;
@SuppressWarnings("static-access")
String outt = fl.toString(16);
System.out.println(outt);
tedArea.append(BinStringToHex(outt.substring(0, 8))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(8, 16))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(16, 24))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(24, 32))); //Printing in hex next 8 Bits
Nao eh eficiente mas funciona. O problema que eh uma float comum, sendo assim ele da erro na hora que procura os ultimos bits
Na minha cabeca (que esta errada claro), era so usar Float32 no lugar do Float… Mass… Nao funciona
[quote=rogelgarcia]Em Java o tipo de dados float… tem 32 bits
E o double tem 64 bits…
Esses são os tipos de dados disponíveis em ponto flutuante
E tem a classe BigDecimal… para números gigantescos…
[/quote]
Mas entao na teoria era para funcinar
Porem ele imprime 30 bits quando eu uso virgula, teria que ser 32 certo?
100000010100000000000000000000
Por isso ele nao consegue formar o ultimo hexa
Na verdade do codigo correto eh este
Float bi = new Float(vOholdoff.getText()) ;
@SuppressWarnings("static-access")
String outt = Integer.toBinaryString(Float.floatToRawIntBits(bi));
//String outt = bi.toString(16);
System.out.println(outt);
tedArea.append(BinStringToHex(outt.substring(0, 8))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(8, 16))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(16, 24))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(24, 31))); //Printing in hex next 8 Bits
ELe imprime
111111000000000000000000000000
111111000001011111001010001000
111111000001011111001010001110
isso
tedArea.append(BinStringToHex(“00” + outt.substring(0, 6))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(6, 14))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(14, 22))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(22, 30))); //Printing in hex next 8 Bits
nao seria
tedArea.append(BinStringToHex(outt.substring(0, 8 ))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(8, 16))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(16, 24))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(24, 32))); //Printing in hex next 8 Bits
IEEE 754 (Padrão usado para pontos flutuantes em Java)
[/quote]
Obrigado… Usei a 754 para resolver o problema… No meu caso vai funcinar… Mas dependendo o caso (se for um numero negtivo por exemplo) teri q mudar o codigo…
[quote=rogelgarcia]isso
tedArea.append(BinStringToHex(“00” + outt.substring(0, 6))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(6, 14))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(14, 22))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(22, 30))); //Printing in hex next 8 Bits
nao seria
tedArea.append(BinStringToHex(outt.substring(0, 8 ))); //Printing in hex the frist 8 bits
tedArea.append(BinStringToHex(outt.substring(8, 16))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(16, 24))); //Printing in hex next 8 Bits
tedArea.append(BinStringToHex(outt.substring(24, 32))); //Printing in hex next 8 Bits
?[/quote]
Nao nesse caso, como ele so estava imprimindo 30 bits (excluia os 2 primeiros) eu recoloquei os dois zeros na frente nesta linha
tedArea.append(BinStringToHex(“00” + outt.substring(0, 6))); //Printing in hex the frist 8 bits
Sendo assim ele nao vai ter que pegar os 8 primeiros bits… somente o 00 (que inclui manualmente) e os 6 primeiros… finalizando 8 bits
dai em diante ele vai pegando os outros de 8 em 8
6 + 8 = 14 (pega bit 6 ateh o 14)
e assim por diante… fechando os 30 bits + 2 bits que botei no inicio… = 32