Mais sobre binário

Vamos ver quem pode me ajudar com isso. Quer converter uma string ASCII para binário. É um problema relativamente simples. Em python[bb], 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 😉 )


15 respostas para “Mais sobre binário”

  1. Avatar de Thais
    Thais

    Preciso converter Ascci em binário na linguagem C++ como posso fazer isso ?

  2. Avatar de vilson
    vilson

    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.

  3. Avatar de Leandro Nascimento Camargo
    Leandro Nascimento Camargo

    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.

  4. Avatar de Flávio Theruo Kaminisse

    @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

  5. Avatar de felipe tonello

    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

  6. Avatar de felipe tonello

    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

  7. Avatar de felipe tonello

    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

  8. Avatar de Rodrigo
    Rodrigo

    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

  9. Avatar de Fabio Ortolan
    Fabio Ortolan

    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.

  10. Avatar de Paulo

    @Flávio Theruo Kaminisse:
    Mas seu código funciona apenas pra numeros. Correto?

  11. Avatar de Daniel Luz
    Daniel Luz

    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’)

  12. Avatar de Daniel Luz
    Daniel Luz

    É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.

  13. Avatar de Flávio Theruo Kaminisse

    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

  14. Avatar de TaQ

    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"]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *