String para Bytes - RESOLVIDO

8 respostas
S

Então pessoal, queria saber se tem algum jeito de eu passar uma string de bits e ele converter esse bits em bytes. Por exemplo eu envio a String “00000000” e isso corresponde a byte de valor zero, ou eu passo “11111111” e isso corresponde a um byte de valor 255 ou FF em hexa.
Quando eu conseguir fazer a conversão vou gravar esses bytes em um arquivo.
Se desse jeito não for possivel, alguem tem alguma sugestão de como fazer? Posso tambem receber em decimal e depois fazer a conversão, mas preferencialmente seria desse modo, pq não tenho que mexer na codificação.
Muito obrigado.

8 Respostas

G

EU particularmente evito trabalhar com outro tipo de Objeto que não seja String, String Forever.

X

snoop:
Então pessoal, queria saber se tem algum jeito de eu passar uma string de bits e ele converter esse bits em bytes. Por exemplo eu envio a String “00000000” e isso corresponde a byte de valor zero, ou eu passo “11111111” e isso corresponde a um byte de valor 255 ou FF em hexa.
Quando eu conseguir fazer a conversão vou gravar esses bytes em um arquivo.
Se desse jeito não for possivel, alguem tem alguma sugestão de como fazer? Posso tambem receber em decimal e depois fazer a conversão, mas preferencialmente seria desse modo, pq não tenho que mexer na codificação.
Muito obrigado.

Pessoalmente eu não conheço nenhuma biblioteca ou função em java que faça isso direto, a meu ver só interpretando o string e convertendo. Mas da uma pesquisada na net que você deve achar alguma coisa!

X

Nossa, então para que existiriam os outros objetos! Na verdade para que utilizar programação orientada a objetos. Imagina fazer uma soma com strings!
rsrsrsrsrs

S

x@ndy:
snoop:
Então pessoal, queria saber se tem algum jeito de eu passar uma string de bits e ele converter esse bits em bytes. Por exemplo eu envio a String “00000000” e isso corresponde a byte de valor zero, ou eu passo “11111111” e isso corresponde a um byte de valor 255 ou FF em hexa.
Quando eu conseguir fazer a conversão vou gravar esses bytes em um arquivo.
Se desse jeito não for possivel, alguem tem alguma sugestão de como fazer? Posso tambem receber em decimal e depois fazer a conversão, mas preferencialmente seria desse modo, pq não tenho que mexer na codificação.
Muito obrigado.

Pessoalmente eu não conheço nenhuma biblioteca ou função em java que faça isso direto, a meu ver só interpretando o string e convertendo. Mas da uma pesquisada na net que você deve achar alguma coisa!


Então Xandy estou procurando mas está dificil. Normamente, a conversão que o pessoal faz para bytes, de uma String, é só para obter o codigo ASCII correspondente. Ninguem tenta obter o valor correspondente de em binário.
Se alguem tiver uma dica, agradeço.

P

String str = "1111111"; int decimal = Integer.parseInt(str,2); String hex = Integer.toHexString(decimal);

S

pmlm:
String str = "1111111"; int decimal = Integer.parseInt(str,2); String hex = Integer.toHexString(decimal);

Então pmlm, o que eu preciso na verdade é transforma essa String em um array de bytes (byte[]), mas, obrigado mesmo assim.
Acho que encontrei o caminho para a solução, usar a classe BitSet, assim que terminar a implementação se funcionar eu posto aqui.

G

Nossa, então para que existiriam os outros objetos! Na verdade para que utilizar programação orientada a objetos. Imagina fazer uma soma com strings!
rsrsrsrsrs

Parse amigao 8)

S
Ae pessoal, resolvido. Achei essa classe na net que faz exatamente o que eu preciso
public class ExportableBitSet extends BitSet {

    private static final long serialVersionUID = 1L;

    public ExportableBitSet() {
        super();
    }

    public ExportableBitSet(int nbits) {
        super(nbits);
    }

    public ExportableBitSet(byte[] bytes) {
        this(bytes == null? 0 : bytes.length*8);
        for (int i = 0; i < size(); i++) {
                if (isBitOn(i, bytes))
                        set(i);
        }
    }

    public byte[] toByteArray()  {

        if (size() == 0)
                return new byte[0];

        // Find highest bit
        int hiBit = -1;
        for (int i = 0; i < size(); i++)  {
                if (get(i))
                        hiBit = i;
        }

        int n = (hiBit + 8) / 8;
        byte[] bytes = new byte[n];
        if (n == 0)
                return bytes;

        Arrays.fill(bytes, (byte)0);
        for (int i=0; i<n*8; i++) {
                if (get(i))
                        setBit(i, bytes);
        }

        return bytes;
    }

    protected static int BIT_MASK[] =
        {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

    protected static boolean isBitOn(int bit, byte[] bytes) {
        int size = bytes == null ? 0 : bytes.length*8;

        if (bit >= size)
                return false;

        return (bytes[bit/8] & BIT_MASK[bit%8]) != 0;
    }

    protected static void setBit(int bit, byte[] bytes) {
        int size = bytes == null ? 0 : bytes.length*8;

        if (bit >= size)
                throw new ArrayIndexOutOfBoundsException("Byte array too small");

        bytes[bit/8] |= BIT_MASK[bit%8];
    }
}
Minha implementação
private void trataString(String bits){
        this.bytes = new byte[bits.length()/8];
        for(int i=0; i<bits.length(); i++){
            if(bits.charAt(i) == '1')
                ExportableBitSet.setBit(i, this.bytes);
        }
    }
Valew!
Criado 24 de fevereiro de 2011
Ultima resposta 26 de fev. de 2011
Respostas 8
Participantes 4