Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > конвертирования двоичку в текст


Автор: MulllGuN 11.12.2007, 22:53
В общем вопрос давольно простой.
Мне понадобился конвертор текста в двоичную систему и обратно
Предпологаю что мне нужно воспользаваца таблицой ASCII но встал ряд вопросов
1) я смотрел в нете и везде разные вариации этой таблицы. Интерестно знать, есть ли общипринятая?
т.е. таблица которая являеца стандартной.
2) и как граматно ей воспользаваца при написание программы.
и еще 1 вопрос, в принцапи не относиться к теме, в компиляторе с русским все нормально а когда программа уже готова в ней нет ни 1 русской буквы все символами....  smile 

 smile 

Автор: likehood 11.12.2007, 23:08
Цитата(MulllGuN @  11.12.2007,  22:53 Найти цитируемый пост)
Мне понадобился конвертор текста в двоичную систему и обратно

имеется в виду перевод числа, записанного в виде строки, в само число?

Цитата(MulllGuN @  11.12.2007,  22:53 Найти цитируемый пост)
и еще 1 вопрос, в принцапи не относиться к теме, в компиляторе с русским все нормально а когда программа уже готова в ней нет ни 1 русской буквы все символами....

посмотри в соседний теме (про ввод-вывод файла) как там сделали

Автор: MulllGuN 11.12.2007, 23:30
нет, я имел в веду текст, буквы 
т.е. по таблице у каждого символа есть номер этот номер можно перевести в двоичку
и я предпологаю что бы не переписывать всю таблицу в скрипт должна быть какаенить функция

Автор: bsa 12.12.2007, 00:12
MulllGuN, каждый символ текста - это на самом деле число (в простейшем случае от 0 до 255). поэтому тебе нужно просто последовательно читать символы из текста и переводить их в двоичную систему:
Код
#include <iostream>
std::ostream& convertToBinary(std::ostream &stream, unsigned char value)
{
     unsigned char t = 1 << (sizeof(t)*8-1);
     while(t) {
          stream << ((value & t) ? 1 : 0);
          t >>= 1;
     }
     return stream;
}

int main()
{
       const char *text = "some simple text";
       const char *p = text;
       while(*p) {
             convertToBinary(std::cout, static_cast<unsigned char>(*p)) << std::endl;
             ++p;
       }
       return 0;
}

Автор: MulllGuN 12.12.2007, 00:33
да нет. блин не то я имел в веду.
блин если я с помащью своей программы переведу там например "привет" в двоичку
или рассказ на лист. ты представь как будет выглядеть последний символ в двоичке это байта 2-3
вот что бы такова не было я хочу задействовать  ASCII 1 символ = 1 целому байту

Автор: Greeen 12.12.2007, 01:08
MulllGuN, ничего не понятно. Если будешь использовать ASCII, то вариант bsa все правильно сделает.

Автор: MulllGuN 12.12.2007, 01:11
а что отвечает за ASCII ? и за перевод из двоички в символ по этой таблице и обратно?

Автор: bsa 12.12.2007, 15:57
MulllGuN, ты не понял. ASCII - это соответствие символов кодам. Она используется теми, кто шрифты делает или перекодировщики из одной кодировки в другую. В твоем случае, не нужно ничего никуда перекодировать. Просто переводишь каждый код, задающий символ, в двоичную систему и все.

Автор: MulllGuN 18.12.2007, 02:47
блин я обьясняю, что в этом случаи большые тексты будет сложно переводить в двоичку, вернее не сложнее а что 1 символ будет под конец занимать два байта а мне нужен 1 символ 1 байит при любом раскладе. по этому я и хочу воспользаваца таблицой

Добавлено через 1 минуту и 41 секунду
так видимо я реально ни чего не понял. обьясните плз "на пальцах"

Автор: nickless 19.12.2007, 01:48
Цитата(MulllGuN @  18.12.2007,  00:47 Найти цитируемый пост)
1 символ будет под конец занимать два байта 

Почему ты так считаешь?

Цитата(MulllGuN @  18.12.2007,  00:47 Найти цитируемый пост)
обьясните плз "на пальцах" 

Объясняю, букв нет есть цифры, компьютер ничего другого не понимает. Вот этот текст - набор цифр, просто программы интерпретируют их по другому и показывает тебе картинки, которые мы называем буквами. Как это происходит зависит от кодировки, их много, стандартной нет, ASCII например поддерживает только английские буквы, цифры и некоторые знаки.
Поэтому сначала надо определится зачем тебе понадобилось "переводить" текст в "двоичку" и что это значит. По сути тебе нужно интерпретировать цифры как тебе надо, например записать их в виде десятичных цифр.

Пример разной интерпретации одного и того же текста:
Код

#include <iostream>

int main()
{
    char str[] = "matrix has you";

    int i = 0;
    while (str[i])
    {
        // interpret chars as chars
        std::cout << "\"" << str[i] << "\" ";
        i++;
    }
    std::cout << std::endl;

    i = 0;
    while (str[i])
    {
        // interpret chars as unsigned numbers
        std::cout << "\"" << static_cast<unsigned int>(str[i]) << "\" ";
        i++;
    }
    std::cout << std::endl;

    return 0;
}


Вывод
Код
% ./main                                                                                                                  /tmp/bla [23:36:42]
"m" "a" "t" "r" "i" "x" " " "h" "a" "s" " " "y" "o" "u"
"109" "97" "116" "114" "105" "120" "32" "104" "97" "115" "32" "121" "111" "117"
"6d" "61" "74" "72" "69" "78" "20" "68" "61" "73" "20" "79" "6f" "75"
"01101101" "01100001" "01110100" "01110010" "01101001" "01111000" "00100000" "01101000" "01100001" "01110011" "00100000" "01111001" "01101111" "01110101"


Добавлено через 1 минуту
Кстати символ может занимать до 4-х байт, это тоже зависит от кодировки, но обычно 1.

Автор: MulllGuN 21.12.2007, 03:31
ммм... ладно попытаюсь по подробней обьяснить...
есть сайт который конвертирует двоичку в текст и обратно 
(вот он http://it-static.pl/index.php?q=bin2txt)
я хочу сделать тоже самое но на с++, не в сети а как обычную программу. Я просто думаю что он использавал общеизвестную таблицу символов. я тоже хотел бы ее применить для своей проги. думаю так болие ясней чего я хочу...

Автор: bsa 22.12.2007, 19:35
MulllGuN, твой сайт ругается по польски.
Приведи лучше несколько примеров работы - что на входе, что на выходе.
Может тебе нужно что-то вроде http://ru.wikipedia.org/wiki/UUE - кодирование двоичных данных (т.е. не текстовых) в допустимый для ASCII набор символов?

Автор: MulllGuN 23.12.2007, 01:52
Цитата

Может тебе нужно что-то вроде UUencode - кодирование двоичных данных (т.е. не текстовых) в допустимый для ASCII набор символов?

скорее всего
Цитата

Приведи лучше несколько примеров работы - что на входе, что на выходе

примеров работы нет.
могу обьяснить как это рабоатать должно

я пишу текс в программу. программа переводит в двоичку.
я этот текст отсылаю человеку. человек беред этот текст и переводит на нормальный человечески язык. (не при помащью моей программы)

Автор: nickless 23.12.2007, 04:21
Цитата(MulllGuN @  21.12.2007,  01:31 Найти цитируемый пост)
есть сайт который конвертирует двоичку в текст и обратно 

Кое как нашел конвертер на том сайте, ничего сверхестественного он не делает, просто конвертирует буквы в числа. Напиши там "matrix has you" и сравни с тем, что выводит мой пример.

Цитата(MulllGuN @  22.12.2007,  23:52 Найти цитируемый пост)
я пишу текс в программу. программа переводит в двоичку.
я этот текст отсылаю человеку. человек беред этот текст и переводит на нормальный человечески язык

Интересно, а зачем?

Автор: MulllGuN 23.12.2007, 09:30
Цитата

Кое как нашел конвертер на том сайте, ничего сверхестественного он не делает, просто конвертирует буквы в числа. Напиши там "matrix has you" и сравни с тем, что выводит мой пример.

хорошо.... только я не совсем понял алгоритм действий... вернее понял но по конкретней пожалуйста.
вот как нам перевести символ "А" в двоичку... что мы используем?
Цитата

Интересно, а зачем?

кхм... эт немного личное) но все же... подруга программист... и хотелось бы ей новогодию открытку таким вот образом написать) попросить сделать когота или воспользаваца уже готовой программой не то, хочу еще понять самому как это делаеться) я надеюсь это ни чего не изменит)

Автор: bsa 23.12.2007, 12:30
MulllGuN, вот http://forum.vingrad.ru/index.php?showtopic=186657&view=findpost&p=1345634 я написал то, что тебе нужно. Осталось лишь дооформить под твои нужды.
И ничего более конкретного сделать нельзя, так как ты даже пример работы программы показать не хочешь, а ссылка, которую ты дал, не работает.
Моя программа делает это: http://www.eki.mdh.se/personal/pdn01/apps/txt2bin.php
Проверить можно тут: http://www.eki.mdh.se/personal/pdn01/apps/bin2txt.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)