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.
String para Bytes - RESOLVIDO
8 Respostas
EU particularmente evito trabalhar com outro tipo de Objeto que não seja String, String Forever.
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!
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
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.
String str = "1111111";
int decimal = Integer.parseInt(str,2);
String hex = Integer.toHexString(decimal);
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.
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)
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];
}
}
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);
}
}