Vamos ver quem pode me ajudar com isso. Quer converter uma string ASCII para binário. É um problema relativamente simples. Em python, resolvi assim:
def toBin(intNum):
s=""
for i in [2 ** (7-n) for n in range(8)]:
s+={True:"1",False:"0"}[intNum>=i]
intNum=intNum%i
return s
print " ".join([toBin(ord(i)) for i in list("Teste")])
Não sei se é uma solução elegante, mas como fiz em menos de dois minutos, fiquei com essa mesmo. Existe um jeito mais prático? Um módulo que faça isso? E em outra linguagem?
(Não, eu não programo em binário 😉 )
Preciso converter Ascci em binário na linguagem C++ como posso fazer isso ?
Oi, tenho uma dúvida. Sou programador, porém, desatualizado, e não mexo em binário.
Na verdade quero saber como eu devo fazer para transg=formar fotos que não sei como transformei-as em bin, e agora eu quero reverter.
grato.
Bom é quando existe suporte nativo a essas coisas, como ocorre em JS:
var c = [], s = ‘teste’;
for(var p in s) c[c.length] = s.charCodeAt(p).toString(2);
alert(c);
só testei em ‘8-bit char’, já em unicode talvez dê piti.
@Paulo,
Isso mesmo, na época fiz a função apenas para converter números, postei ela aqui pois é uma função recursiva, por isso achei interessante compartilhar a idéia.
Abraços
Desculpe o flood elcio.. é que enviei 2 vezes sem querer e depois só vi que não cade tudo… então fiz um arquivinho .cpp com o código
em C++ eu fiz uma classe q converte int para string binaria lembrando q um char é um int de 8 bits(ASCII)
link para o arquivo: http://felipetonello.com/TBinario.cpp
em C eu fiz uma classe q converte int para string binaria… lembrando q um char é um int de 8 bits(ASCII)
#include "vcl\vcl.h"
#include "string.h"
#pragma hdrstop
class TBinario {
public:
char * __fastcall IntToStrBin(unsigned short int num);
};
//---------------------------------------------------------------------------
char * __fastcall TBinario::IntToStrBin(unsigned short int num)
{
unsigned short int BYTE[8] = {
0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80
};
unsigned short int cont,bit=7;
static char buf[10]; //para armazenar a string de números binários.
for( cont = 0; cont
em C eu fiz uma classe q converte int para string binaria… lembrando q um char é um int de 8 bits(ASCII)
#include “vcl\vcl.h”
#include “string.h”
#pragma hdrstop
class TBinario {
public:
char * __fastcall IntToStrBin(unsigned short int num);
};
//—————————————————————————
char * __fastcall TBinario::IntToStrBin(unsigned short int num)
{
unsigned short int BYTE[8] = {
0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80
};
unsigned short int cont,bit=7;
static char buf[10]; //para armazenar a string de números binários.
for( cont = 0; cont
Em Python tem uma biblioteca chamada binascii que faz esse serviço e muitos outros, como converter para número de outras bases. Dá uma olhada nesse link: http://www.python.org/doc/1.5.2p2/lib/module-binascii.html
Tem uma extensão para o Firefox que faz esta conversão, a extensão se chama leetkey
http://leetkey.mozdev.org/
Bem acho que o código é aberto.
@Flávio Theruo Kaminisse:
Mas seu código funciona apenas pra numeros. Correto?
Funções prontas em PHP:
http://www.php.net/pack
http://www.php.net/unpack
😉
Tentando arrumar um jeito de mostrar a indentação culpa do Python! 🙂
def to_bin(num, padding = 8 ):
_ result = []
_ remainder = num
_ while remainder:
_ _ result.append(’01′[remainder % 2])
_ _ remainder //= 2
_ return ”.join(result[::-1]).rjust(padding, ‘0’)
Élcio, talvez isso seja muito “pegar no pé”, mas sua função tem os problemas de performance de concatenação sucessiva de strings e recriar o dict a cada iteração não que isso deva trazer qualquer efeito num código pra uso momentâneo.
Eu tenho uma pequena biblioteca pessoal de funções, e nela tem uma função pra conversão pra bases arbitrárias. Simplificando e reduzindo o código pra base 2, ficaria assim:
def to_bin(num, padding = 8):
result = []
remainder = num
while remainder:
result.append('01'[remainder % 2])
remainder //= 2
return ''.join(result[::-1]).rjust(padding, '0')
Poderia ser feito também usando operadores de bits, mas acho que seria complicação à toa aqui.
Tinha feito uma função recursiva em C na faculdade para resolver o problema de converter para binário, lembrando da idéia apenas deixei em código php, mas pode ser utilizado em qualquer linguagem.
function toBin($num) {
if ( $num > 0 ):
$divisao = ( int ) ( $num / 2 );
$resto = ( $num % 2 );
toBin($divisao);
echo $resto;
endif;
}
Abraços
Em Ruby:
"Teste".unpack("c*").map {|c| c.to_s(2).rjust(8,"0")}.join(" ")
Resultado:
"01010100 01100101 01110011 01110100 01100101"
Se você usar direto, pode inserir um método to_bin em toda String, onde ela te retorna um array com os binários:
class String
def to_bin
self.unpack("c*").map {|c| c.to_s(2).rjust(8,"0")}
end
end
s1 = "oi"
s2 = "Elcio"
p s1.to_bin
p s2.to_bin
Resultado:
[taq@~/code/ruby]ruby str_bin.rb
["01101111", "01101001"]
["01000101", "01101100", "01100011", "01101001", "01101111"]