Problemas com função de cálculo  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
DouglasCar
JavaTeenager

Membro desde: 26/07/2004 11:12:04
Mensagens: 186
Offline

Pessoal tenho o seguinte problema, preciso fazer uma função que execute o seguinte cálculo:

Se tenho os seguintes valores em hexa: 02 e 01

Operação XOR (Hex) Shift Left [x2 (Byte)]
00 (xor) 02 = 02 02 X 2 = 04 h
04 (xor) 01 = 05 05 X 2 = 0A h

Tenho para isto esta função que deve estar incorreta

Sendo que no fFrame esta String está em hexadecimal. Agradeço se alguém puder me ajudar a montar esta função para que o cálculo seja executado corretamente.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Primeira coisa - strings não são arrays de bytes
Segunda coisa - converta a string hexadecimal para um array de bytes, e só então você pode usar aquela rotina que você nos mostrou. Para converter a string hexadecimal, pegue de dois em dois dígitos hexadecimais (acho que você sabe usar String.substring(), não?)
Dica - use Integer.parseInt com dois argumentos, sendo o segundo argumento a base (16). Por exemplo:

põe o valor (byte)0xFF (ou seja, -127) no byte b.
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Em vez de usar %256, use & 0xFF
Funciona melhor (não usa uma divisão inteira, que é um processo lento - chega a ser mais lento que uma divisão de ponto flutuante em alguns processadores) - e funciona direito quando o número é negativo.
[WWW]
DouglasCar
JavaTeenager

Membro desde: 26/07/2004 11:12:04
Mensagens: 186
Offline

Valeu a ajuda thingol, mas poderia me dar uma ajuda em montar esta função, pois fiquei meio perdido na sua explicação. Abraço!
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Desculpe o atraso...
Mas é que tenho de trabalhar

É assim: suponha que você tenha a seguinte string:



Como você vê, essa string contém 34 caracteres hexadecimais, o que equivale a 17 bytes (CA, FE, BA, BE etc.)

Então você vai trabalhar não com a string original, mas com um array de bytes:



Ok, mas feito isso, você tem um array de bytes preenchidos com o valor 0. Portanto vamos converter a string acima para o array de bytes:



Agora no array bytes[] você tem os bytes já convertidos direitinho. Mais moleza que isso só mandando o programa pronto pro seu email... (Obviamente dê uma conferida, estou escrevendo o código acima "de cabeça", sem testar...)
[WWW]
DouglasCar
JavaTeenager

Membro desde: 26/07/2004 11:12:04
Mensagens: 186
Offline

Valeu pela força thingol, mas gostaria de ver contigo se estou no caminho certo, acontece que fiz algumas alterações conforme me indicastes.

Fiz um teste e para o exemplo da string "Fogo no setor 4 " para a qual eu tenho como resultado A6 h no cálculo:

Operação XOR (Hex) Shift Left [x2 (Byte)]
00 (xor) 02 = 02 02 X 2 = 04 h
. .
. .
. .
D0 (xor) 03 = D3 D3 X 2 = A6 h

Com o código acima me foram retornados os seguintes resultados:

bytes:[B@19e15c
bytes[i]:4
bytes[i]:10
bytes[i]:16
bytes[i]:16
bytes[i]:-84
bytes[i]:-122
bytes[i]:-62
bytes[i]:90
bytes[i]:-12
bytes[i]:52
bytes[i]:-74
bytes[i]:44
bytes[i]:-66
bytes[i]:-74
bytes[i]:-124
bytes[i]:-42
bytes[i]:72
bytes[i]:-48
bytes[i]:-56
bytes[i]:-48
bytes[i]:-90
bByte:-90

Agradeço se tiveres alguma dica. Abraço!
cezarborges
What is classpath?
[Avatar]

Membro desde: 06/03/2008 08:07:44
Mensagens: 8
Localização: cascavel
Offline

o Resultado não seria por acaso 1A6 h? pois pelos meus caldulos D3 * 2 = 1A6

vc pode postar por gentileza suastring em hex


N/A
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team