LINUX.ORG.RU

Ищу софт для преобразования Text -> Binary

 , , ,


0

2

Хочу перевести несколько строк в нули и единицы. Можно было бы воспользоваться какими-нибудь веб-сайтами, но я боюсь, как бы эти строки не утекли куда-то дальше моей сессии. Нужен, прям, софт. По любому такой уже кто-то делал. Чтоб локально можно было переводить текст в последовательность нулей и единиц. В идеале, чтобы можно было переводить не только с латиницы, а, ещё и с кириллицы(с указанием кодировки, если нужно). Дистрибутив - арч, но если софт можно собрать из сурсов, то тоже не откажусь.



Последнее исправление: Tyse_EX (всего исправлений: 1)

Текст это и есть бинарные данные, ну для удобства текст как бы отдельно существует, но на деле, это просто бинарник просто со своим форматом. Или тебе надо, в текстовые 0 и 1 перевести? Чтобы например

test.txt

привет

bin.txt

11010000101111111101000110000000110100001011100011010000101100101101000010110101110100011000001000001010
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


void pb(FILE * file,uint8_t b)
{
    printf("%d%d%d%d%d%d%d%d\n",
            (b & (1 << 7)) > 0,
            (b & (1 << 6)) > 0,
            (b & (1 << 5)) > 0,
            (b & (1 << 4)) > 0,
            (b & (1 << 3)) > 0,
            (b & (1 << 2)) > 0,
            (b & (1 << 1)) > 0,
            (b & (1 << 0)) > 0);

    fprintf(file,"%d%d%d%d%d%d%d%d",
                (b & (1 << 7)) > 0,
                (b & (1 << 6)) > 0,
                (b & (1 << 5)) > 0,
                (b & (1 << 4)) > 0,
                (b & (1 << 3)) > 0,
                (b & (1 << 2)) > 0,
                (b & (1 << 1)) > 0,
                (b & (1 << 0)) > 0);

}

int main(int argc, char *argv[])
{
    if(argc < 2)
    {
       printf("showbits input output\n");
       exit(0);
    }
    FILE * inp = fopen(argv[1],"rb");
    FILE * out = fopen(argv[2],"w");
    int ch = 0;
    while( (ch = getc(inp)) != EOF)
    {
      pb(out,ch);
    }
    return 0;
}
dron@gnu:~/Рабочий-стол$ gcc printbit.c 
dron@gnu:~/Рабочий-стол$ ./a.out test.txt out.txt
11010000
10111111
11010001
10000000
11010000
10111000
11010000
10110010
11010000
10110101
11010001
10000010
00001010
dron@gnu:~/Рабочий-стол$ 
anonymous
()
Ответ на: комментарий от anonymous

Ой, забыл, а вот обратно

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(int argc, char *argv[])
{
    if(argc < 2)
    {
       printf("backbits input output\n");
       exit(0);
    }
    FILE * inp = fopen(argv[1],"r");
    FILE * out = fopen(argv[2],"wb");
    int ch  = 0;
    int cnt = 0;
    int bits[8] = {0,0,0,0,0,0,0,0};
    unsigned char byte = 0;
    while( (ch = getc(inp)) != EOF)
    {
       bits[cnt++] = ch == '1'? 1 : 0;
       if(cnt == 8)
       {
          byte += ( bits[0]<< 7 );
          byte += ( bits[1]<< 6 );
          byte += ( bits[2]<< 5 );
          byte += ( bits[3]<< 4 );
          byte += ( bits[4]<< 3 );
          byte += ( bits[5]<< 2 );
          byte += ( bits[6]<< 1 );
          byte += ( bits[7]<< 0 );
          fwrite(&byte,1,1,out);
          printf("%c",byte);
          cnt=0;
          byte=0;
       }
    }
    return 0;
}
dron@gnu:~/Рабочий-стол$ cat out.txt 
11010000101111111101000110000000110100001011100011010000101100101101000010110101110100011000001000001010dron@gnu:~/Рабочий-стол$ gcc readbit.c && ./a.out out.txt text.txt 
привет
dron@gnu:~/Рабочий-стол$
anonymous
()
Ответ на: комментарий от frunobulax

По сабжу - задачка для поделки на пыхтоне :)

Как раз для меня, я другие и не осиливаю.

Но зачем?

Ну началось всё с того что, [72 строки в три абзаца с никому нинужным обоснованием], ну и как минимум меньше времени на флуд в толксах.

anonymous
()