Duvidas long e byte[] (Resolvido)

2 respostas
fsjr

Olá pessoal td blz ? Espero que sim … Vou tentar resumir espero que consiga explicar …

Bom, tenho um ambiente Cliente/Servidor. No Cliente faço um calculo de CheckSum que me retorna um [color=darkred]long[/color]

Passo para o servidor um array de byte ( byte[] ) Junto com ele está o meu CheckSum. Mas como não posso largar um [color=darkred]long[/color] ali no array de bytes criei uma String e peguei o array de bytes dela.

long checksum = cis2.calculaCheckSum(bytesTemp, (int)util.getTamanhoMaximo() ) ;
//Transforna em String
String crc32 = new String( new Long(checksum).toString() );
//Pega o array de bytes desde calculo
byte[] checkSum = crc32 .getBytes();

Esse array de bytes que peguei ( checkSum ) eu faço um for e largo no meu array de bytes que realmente vou enviar para o servidor.

for ( int g = 0 ; g < checkSum.length ; g++ ) {
   bytes[proxPos] = checkSum[g];
   proxPos++;
}

Consigo receber e separar os bytes de dados dos bytes do checksum no servidor direitinho. Só que quando eu crio o array de bytes do checksum lá no servidor eu não consigo voltar estes bytes para a minha String igual a que eu tinha no cliente.
O que quero ver é como posso fazer esse procedimento, posso estar tentando fazer pelo modo mais difícil ou errado, enfim queria agora dicas e sugestões …

Espero que tenha me feito entender …
Qualquer coisa posta que respondo.
Valeu abraços

2 Respostas

Sami_Koivu

Olá,

Bom, acho que não deveria haver um problema na abordagem que você escolheu. Só gasta mais bytes se o número for grande. Fiz um exemplo fazendo a transformação long :arrow: byte[] :arrow: long

public class LongToBytes {
    public static void main(String[] args) {
        long l = 1234567890123456789L;
        byte[] bytes = longToStringBytes(l);
        long l2 = stringBytesToLong(bytes, 0, bytes.length);
        System.out.println(l2);
    }

    public static byte[] longToStringBytes(long l) {
        return String.valueOf(l).getBytes();
    }
    
    public static long stringBytesToLong(byte[] data, int offset, int length) {
        return Long.parseLong(new String(data, offset, length));
    }

E se você quiser um exemplo que sempre gera um array de 8 bytes:

public class LongToBytes {
    public static void main(String[] args) {
        long l = 1234567890123456789L;
        byte[] bytes = longToBytes(l);
        long l2 = getLong(bytes, 0, bytes.length);
        System.out.println(l2);
    }

    public static byte[] longToBytes(long l) {
        byte[] data = new byte[8];
        for (int i=data.length-1; i &gt= 0; i--) {
            data[i] = (byte) (l & 0xFF);
            l &gt&gt= 8;
        }

        return data;
    }

    public static long getLong(byte[] data, int offset, int length) {
        long l = 0;
        int i = 0;
        while (i &lt length) {
            l &lt&lt= 8;
            l += data[offset + i] & 0xFF;
            i++;
        }
        return l;
    }

}

[]s,
Sami

fsjr

Ai Sami, bingo! Perfeito cara, ta funcionando beleza !!

Muito obrigado, no que puder ajudar um dia, estamos sempre por ai :slight_smile:

Valeu

Criado 4 de novembro de 2006
Ultima resposta 4 de nov. de 2006
Respostas 2
Participantes 2