| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2004 13:04:52
|
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.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2004 13:45:19
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2004 13:49:15
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2004 14:24:17
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2004 19:18:26
|
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...)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2004 09:08:30
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 16:52:20
|
cezarborges
What is classpath?
![[Avatar]](/images/avatar/1efe3f93c5946a59edbdb0444bc4a463.png)
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 |
|
|
 |
|
|