Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> int to binary - как конвертировать в бинарный? Из int в бинарный. 
V
    Опции темы
DragoonFighter
Дата 27.1.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Здравствуйте Программисты, 

мне нужно скажем int=123; преобразовать в бинарный код. 
Я искал в гоогле и нашёл очень хорошую и рабочую функцию:
Код

void binary(int number) {
    int remainder;

    if(number <= 1) {
        cout << number;
        return;
    }

    remainder = number%2;
    binary(number >> 1);    
    cout << remainder;
}
...
int number;

    cout << "Please enter a positive integer: ";
    cin >> number;
    if (number < 0) 
        cout << "That is not a positive integer.\n";
    else {
        cout << number << " converted to binary is: ";
        binary(number);
        cout << endl;
    }


Всё работает прекрасно! Но есть одна проблема. Этот бинарный код мне нужно преоброзовать снова в int.
То есть: ввод 123 вывод 1111011 и это число записывается в int.

Как это сделать в самом void я знаю, но мне нужно создать этот int в main а так как я незнаю и не могу не где найти как вытащить int из void и засунуть его в int в main, мне нужна функция которая полностью работает в main.
Я ну думаю что это можно сделать с while() поскольку я пробовал всё что мог и не чего не вышло, но если это возможно, то прошу пожалуйста пример с whiel(). 
За ранние спасибо!
Надеюсь я не очень плохо выразился?
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
destrd
Дата 27.1.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 1.10.2008

Репутация: нет
Всего: 4



Ну переведите в строку, а потом типа atoi с основанием 10
--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems.        -- Jamie Zawinski in comp.lang.emacs
PM MAIL ICQ   Вверх
DragoonFighter
Дата 27.1.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(destrd @ 27.1.2009,  21:54)
Ну переведите в строку, а потом типа atoi с основанием 10

Это как? Можно пример?
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
GoldFinch
Дата 27.1.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



бгг тема
учите системы счисления и не задавайте глупых вопросов %)

Добавлено через 52 секунды
а код в 1м посте однозначно жжот)))
PM MAIL ICQ   Вверх
mes
Дата 27.1.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вывод целочисленного числа числа в двоичной системе:

Код

int n = 122;
for (int i=0; i<=sizeof(n)*8; ++i) std::cout<< (n>>i & 1);

ну а в остальном 
Цитата(DragoonFighter @  27.1.2009,  20:45 Найти цитируемый пост)
Надеюсь я не очень плохо выразился?

не хочется Вас разочаровывать, но правда дороже smile

Это сообщение отредактировал(а) mes - 27.1.2009, 23:06


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 27.1.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(mes @ 27.1.2009,  22:58)
вывод целочисленного числа числа в двоичной системе:

Код

int n = 122;
for (int i=0; i<=sizeof(n)*8; ++i) std::cout<< (n>>i & 1);

ну а в остальном 
Цитата(DragoonFighter @  27.1.2009,  20:45 Найти цитируемый пост)
Надеюсь я не очень плохо выразился?

не хочется Вас разочаровывать, но правда дороже smile

Вот, как рас то что искал. Благодарю! А можно изменить общую длину так, чтобы так много нулей не было. То есть чтобы длинна вывода зависела от полной длинны ввода.

Например:
int 10:

вывод:
010100000000000000000000000000000

чтобы вывод был:
0101

а если int = 9876543210

то чтобы вывод был не:
010111100000000000000000000000000

а:
0101111
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
xvr
Дата 28.1.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(mes @ 27.1.2009,  22:58)
вывод целочисленного числа числа в двоичной системе:

Код

int n = 122;
for (int i=0; i<=sizeof(n)*8; ++i) std::cout<< (n>>i & 1);


Угу, только задом-наперед   smile 

Код

int n = 122;
for (int i=sizeof(n)*8; i--;) std::cout<< (n>>i & 1);


PM MAIL   Вверх
mes
Дата 28.1.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(xvr @  28.1.2009,  16:41 Найти цитируемый пост)
Угу, только задом-наперед   smile 

точно  smile 


Цитата(DragoonFighter @  27.1.2009,  22:19 Найти цитируемый пост)
То есть чтобы длинна вывода зависела от полной длинны ввода.

Код

int n = 8;

 std::cout<<0;
 for (int i=sizeof(n)*8; i--;)
 if (n>>(i-1))
 {
     for (int j=i; j--;) std::cout<< (n>>j & 1);
     break;
 }
 std::cout<<"b";
 


пример содержит ошибку.. исправление смотрите ниже..


Это сообщение отредактировал(а) mes - 28.1.2009, 23:47


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(xvr @ 28.1.2009,  17:41)
Цитата(mes @ 27.1.2009,  22:58)
вывод целочисленного числа числа в двоичной системе:

Код

int n = 122;
for (int i=0; i<=sizeof(n)*8; ++i) std::cout<< (n>>i & 1);


Угу, только задом-наперед   smile 

Код

int n = 122;
for (int i=sizeof(n)*8; i--;) std::cout<< (n>>i & 1);

Да, я уже переделал задом на перёд, но всё равно спасибо!

Добавлено @ 19:14
Цитата(mes @ 28.1.2009,  18:29)
Цитата(xvr @  28.1.2009,  16:41 Найти цитируемый пост)
Угу, только задом-наперед   smile 

точно  smile 


Цитата(DragoonFighter @  27.1.2009,  22:19 Найти цитируемый пост)
То есть чтобы длинна вывода зависела от полной длинны ввода.

Код

int n = 8;

 std::cout<<0;
 for (int i=sizeof(n)*8; i--;)
 if (n>>(i-1))
 {
     for (int j=i; j--;) std::cout<< (n>>j & 1);
     break;
 }
 std::cout<<"b";
 

Класс благодарю! Спасибо вам за помощь! 
Мне надо было использовать sizeof()

Огромное спасибо! 

Один вопрос: зачем cout << "0"; и cout << "b"; ?

Это сообщение отредактировал(а) DragoonFighter - 28.1.2009, 19:51
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  28.1.2009,  18:12 Найти цитируемый пост)
Один вопрос: зачем cout << "0"; и cout << "b"; ?

закомментируй, посмотри на результат, и сравни с  некомментированным результатом   smile 


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(mes @ 28.1.2009,  21:24)
Цитата(DragoonFighter @  28.1.2009,  18:12 Найти цитируемый пост)
Один вопрос: зачем cout << "0"; и cout << "b"; ?

закомментируй, посмотри на результат, и сравни с  некомментированным результатом   smile

Теоретически я могу убрать "b"? А ноль просто для начального старта или как? 
Кратко: Можно их убрать, чтобы были просто буквы и только бинарный код, или?

Добавлено через 1 минуту и 4 секунды
Так, мне ещё 3 поста и я могу репутацию ставить.  smile 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  28.1.2009,  20:40 Найти цитируемый пост)
Теоретически я могу убрать "b"? 

да, "b" поставлен для "красоты".


Цитата(DragoonFighter @  28.1.2009,  20:40 Найти цитируемый пост)
А ноль просто для начального старта или как? 

во первых

Цитата(DragoonFighter @  27.1.2009,  22:19 Найти цитируемый пост)
чтобы вывод был:
0101

во вторых :вначале идет поиск значимого бита и с него начинается вывод, и если значащий бит не найден (при n==0) то выводить нечего и следовательно этот ноль является "опорным"


Цитата(DragoonFighter @  28.1.2009,  20:40 Найти цитируемый пост)
Кратко: Можно их убрать, чтобы были просто буквы и только бинарный код, или?

не понял о чем речь.



--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



 smile  Ну я и имел в виду "опорный ноль". Рас это так, то всё понятно, спасибо! 

Ну а насчёт краткого: Имел в виду чтобы были только цифры
Благодарю mes! Выручили! 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  28.1.2009,  20:59 Найти цитируемый пост)
 smile  Ну я и имел в виду "опорный ноль". Рас это так, то всё понятно, спасибо! 

из за второй причины, необязатльно чтоб ноль выводился впереди всегда  .

можно например дополнить код условием, тогда :
Код

 if (!n) std::cout<<0;
 for ...



Цитата(DragoonFighter @  28.1.2009,  20:40 Найти цитируемый пост)
Кратко: Можно их убрать, чтобы были просто буквы и только бинарный код, или?

Цитата(DragoonFighter @  28.1.2009,  20:59 Найти цитируемый пост)
Ну а насчёт краткого: Имел в виду чтобы были только цифры. 

a я чуть  голову не поломал :  smile  smile 


Это сообщение отредактировал(а) mes - 28.1.2009, 22:13


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



 smile   smile  
Да я так и сделаем с условием. Благодарю ещё раз! 

Вопрос полностью решён! 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



приведенный выше код содержит ошибку  smile 
вот исправленный  вариант :
Код

 if  (!n) std::cout<<0;
 for (int i=sizeof(n)*8-1; i>=0; --i)
 if  (n>>i) for (;i>=0; --i) std::cout<< (n>>i & 1);



Это сообщение отредактировал(а) mes - 28.1.2009, 23:28


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(mes @ 28.1.2009,  23:28)
приведенный выше код содержит ошибку  smile 
вот исправленный  вариант :
Код

 if  (!n) std::cout<<0;
 for (int i=sizeof(n)*8-1; i>=0; --i)
 if  (n>>i) for (;i>=0; --i) std::cout<< (n>>i & 1);


 smile  ну нечё, всё круто!

Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int n;
    int b;
    cout << "Your number here: ";
    cin >> n;
    // to binary
    //cout << 0;
    for (int i=sizeof(n)*8; i--;)
    if (n >> (i-1))
    {
                  if  (!n) std::cout<<0;
                  for (int i=sizeof(n)*8-1; i>=0; --i)
                  if  (n>>i) for (;i>=0; --i) std::cout<< (n>>i & 1);
                 break;
                 }
    cout << endl << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



Вот так выглядит вся прога.
Теоретически, не токая уж и важная ошибка.... 
А интересно, сколько цифр можно запихать в int? 
Я раньше в книге читал что оно не большое, то есть ограничено. 
Но забыл на сколько, мне нужно где то около 1 миллиарда цифр.
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
pan2004
Дата 28.1.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(DragoonFighter @  28.1.2009,  23:49 Найти цитируемый пост)
сколько цифр можно запихать в int? 

32 двоичных разряда, обычно. Это примерно 10^9


Цитата(DragoonFighter @  28.1.2009,  23:49 Найти цитируемый пост)
мне нужно где то около 1 миллиарда цифр.

1 миллиард десятичных цифр? Это уже если не на гигабайты, то на сотни мегабайт ОЗУ точно.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
mes
Дата 28.1.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  28.1.2009,  22:49 Найти цитируемый пост)

Вот так выглядит вся прога.

у меня в глазах двоится или в коде действительно цикл вложен сам в себя ??  smile 

а также зачем int b; ?

Добавлено через 2 минуты и 53 секунды
Код

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n;
    cout << "Your number here: ";
    cin >> n;
 
// cout n as binary
    if  (!n) cout<<0;
    for (int i=sizeof(n)*8-1; i>=0; --i)
    if  (n>>i) for (;i>=0; --i) cout<< (n>>i & 1);

    cout << endl << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



--------------------
PM MAIL WWW   Вверх
mes
Дата 29.1.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(pan2004 @  28.1.2009,  22:54 Найти цитируемый пост)
1 миллиард десятичных цифр? 

я думаю имелось ввиду, что нужна  возможность вместить значение миллиард. 

http://www.cplusplus.com/reference/clibrary/climits/


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 29.1.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(pan2004 @ 28.1.2009,  23:54)
Цитата(DragoonFighter @  28.1.2009,  23:49 Найти цитируемый пост)
сколько цифр можно запихать в int? 

32 двоичных разряда, обычно. Это примерно 10^9


Цитата(DragoonFighter @  28.1.2009,  23:49 Найти цитируемый пост)
мне нужно где то около 1 миллиарда цифр.

1 миллиард десятичных цифр? Это уже если не на гигабайты, то на сотни мегабайт ОЗУ точно.

Я пишу программку, которая весь текст, то есть всё что вводят превращает в цифры, в бинарный код, потом сокращает в буквы, в hex и снова в бинарный. Так можно например кодировать файлы, e-mail, текст чата, итд. 
При этом засуну эту функцию в программу которая создаёт пароль. Мне нужен пароль на 200gb его на жесткий диск и этим паролем я закрою мои приватные данные. Эта идея была взята с радио активной станции в России. Там закодировали один важный файл несколькими терабайтам длинным паролем. 

Это причина почему я хотел знать сколько вмещается в int. 
А так конвертирование в бинарный код мне нужно для кодирование текста для типа приватного чата, чтобы если на пример мусара перехватят канал, чтобы им хрен что от моего текста понятно было. Ну, что то типа того.

Добавлено через 2 минуты и 52 секунды
Цитата(mes @ 28.1.2009,  23:55)
Цитата(DragoonFighter @  28.1.2009,  22:49 Найти цитируемый пост)

Вот так выглядит вся прога.

у меня в глазах двоится или в коде действительно цикл вложен сам в себя ??  smile 

а также зачем int b; ?

Добавлено @ 23:58
Код

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n;
    cout << "Your number here: ";
    cin >> n;
 
// cout n as binary
    if  (!n) cout<<0;
    for (int i=sizeof(n)*8-1; i>=0; --i)
    if  (n>>i) for (;i>=0; --i) cout<< (n>>i & 1);

    cout << endl << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Ай тфу блин, всё вместе ляпнул... не, извините, сплю уже,   smile не то копировал... 
b не нужно, и да ваш правильный код тот что и у меня.  smile

Добавлено через 6 минут и 45 секунд
Цитата(mes @ 29.1.2009,  00:15)
Цитата(pan2004 @  28.1.2009,  22:54 Найти цитируемый пост)
1 миллиард десятичных цифр? 

я думаю имелось ввиду, что нужна  возможность вместить значение миллиард. 

http://www.cplusplus.com/reference/clibrary/climits/

Ну предётся сделать while() чтобы ULONG_MAX    Maximum value for an object of type unsigned long int    4294967295  был умножен столько раз, чтобы вышло минимум 1 миллион. Ну это так, просто для любопытства и интереса испробовать  smile 
Нечего серьёзного. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 29.1.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  28.1.2009,  23:15 Найти цитируемый пост)
Я пишу программку, которая весь текст, то есть всё что вводят превращает в цифры, в бинарный код, потом сокращает в буквы, в hex и снова в бинарный. Так можно например кодировать файлы, e-mail, текст чата, итд. 

нда.. может лучше почитать вначале книжки, тогда возможно эти наполеновские планы превратятся в реальные цели. smile

любое число или буква уже и так хранится в двоичном виде, а то что std::cout выводит число в десятичном виде или как букву, 
так это проявление работы функции, которая выводит переменную в удобном для пользователя виде.

остальное комментировать не вижу смысла на текущем этапе.


Это сообщение отредактировал(а) mes - 29.1.2009, 00:24


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 29.1.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(mes @ 29.1.2009,  00:23)
Цитата(DragoonFighter @  28.1.2009,  23:15 Найти цитируемый пост)
Я пишу программку, которая весь текст, то есть всё что вводят превращает в цифры, в бинарный код, потом сокращает в буквы, в hex и снова в бинарный. Так можно например кодировать файлы, e-mail, текст чата, итд. 

нда.. может лучше почитать вначале книжки, тогда возможно эти наполеновские планы превратятся в реальные цели. smile

любое число или буква уже и так хранится в двоичном виде, а то что std::cout выводит число в десятичном виде или как букву, 
так это проявление работы функции, которая выводит переменную в удобном для пользователя виде.

остальное комментировать не вижу смысла на текущем этапе.

Да, это понятно, но я перевожу буквы в свои цифры. У меня в принципе всё для кодирования готово! Просто осталось создать чат, но этим займёмся позже, потому что вы правы, для начала надо читать книги! Ну, пока у меня только одна проблема была, переделать числа в бинарный. Теперь всё пока идёт дальше по тихонько. 
Да и вообще это всё я пробую новые функции которые я изучаю. Скажем во попалась sizeof() сразу делаю с ней пример. Ну вот такой пример и в голову попал пере конвертировать цифры в бинарный. 
Короче всё для знания и изучения нового.

Огромное спасибо вам!
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
bsa
Дата 29.1.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



DragoonFighter, для шифрования данных можно использовать openssl (это библиотека такая), с ее помощью организуются шифрованные каналы связи (HTTPS, SSH, TLS) в большинстве открытых приложений. А для кодирования/декодирования ключа, можно воспользоваться банальной побитовой ксоркой (XOR - исключающие "ИЛИ") ключа с хэшем (MD5, SHA1 и т.п.) пароля, так как: A xor B = C; C xor A = B; C xor B = A
А вот зачем тебе переводить в двичную, чтобы перевести в 16-тиричную, чтобы перевести в двоичную, совсем непонятно. Может тебе нужно какое-нибудь кодирование base64?
PM   Вверх
DragoonFighter
Дата 31.1.2009, 00:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(bsa @ 29.1.2009,  16:31)
DragoonFighter, для шифрования данных можно использовать openssl (это библиотека такая), с ее помощью организуются шифрованные каналы связи (HTTPS, SSH, TLS) в большинстве открытых приложений. А для кодирования/декодирования ключа, можно воспользоваться банальной побитовой ксоркой (XOR - исключающие "ИЛИ") ключа с хэшем (MD5, SHA1 и т.п.) пароля, так как: A xor B = C; C xor A = B; C xor B = A
А вот зачем тебе переводить в двичную, чтобы перевести в 16-тиричную, чтобы перевести в двоичную, совсем непонятно. Может тебе нужно какое-нибудь кодирование base64?

Хорошая информация! Благодарю! 
Насчёт перевода, это просто своё кодирование, просто для изучения и пробы. Просто чем больше разных переводов, на пример с букв в инт с инта в бинах с бинар в хекс и сного в бинар и т.д. 
К стате base64 я уже тоже использовал но поскольку тут только 64 (0-63) символов, я создал свой, 90 символов. 
Просто буквы в цифры, потом эти цифры с помощью например бинарного и хекса закодировать. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 31.1.2009, 00:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DragoonFighter @  30.1.2009,  23:16 Найти цитируемый пост)
е base64 я уже тоже использовал но поскольку тут только 64 (0-63) символов, я создал свой, 90 символов. 


Цитата(DragoonFighter @  30.1.2009,  23:16 Найти цитируемый пост)
Просто буквы в цифры, потом эти цифры с помощью например бинарного и хекса закодировать. 

и все таки мне кажется, что Вы неправильно "воспринимаете происходящее".



--------------------
PM MAIL WWW   Вверх
cutwater
Дата 31.1.2009, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



DragoonFighter, я согласен с mes, Вы что-то явно путаете.


--------------------
user posted image
PM MAIL   Вверх
DragoonFighter
Дата 31.1.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Ну, как я понял base64 кодирует символы. 
То есть на пример 123 = MTIz
Правильно? 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
xvr
Дата 31.1.2009, 19:14 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(DragoonFighter @ 31.1.2009,  13:29)
Ну, как я понял base64 кодирует символы. 
То есть на пример 123 = MTIz
Правильно?

Оно символы не КОДИРУЕТ, а всего лишь переводит в другой вид. Для целей защиты информации (что бы враги не догадались) оно СОВЕРШЕННО непригодно. Равно как и другие способы представления, типа перевода в бин/хекс/хз куда.
Тогда уж проще упаковать исходный текст - такое кодирование, просто закачаешся  smile
У всех систем шифрования есть одно неприменное требование - возможность расшифровать сообщение должно базироваться ТОЛЬКО на знании ключа.
Т.е. злоумышленник может иметь все, вплоть до исходных текстов программ шифрования и дешифрования, но без ключа он расшифровать все равно не сможет

PM MAIL   Вверх
mes
Дата 31.1.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(xvr @  31.1.2009,  18:14 Найти цитируемый пост)
Оно символы не КОДИРУЕТ

Поправка : Кодирует, но не шифрует.   smile 
DragoonFighter, а простое кодирование и шифрование прменяются совсем для разных целей. 
В  контексте Ваших постов речь шла о шифровании, и предлагаемые методы кодирования для этого не предназначены.


Это сообщение отредактировал(а) mes - 31.1.2009, 19:38


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 2.2.2009, 23:10 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(mes @ 31.1.2009,  19:32)
Цитата(xvr @  31.1.2009,  18:14 Найти цитируемый пост)
Оно символы не КОДИРУЕТ

Поправка : Кодирует, но не шифрует.   smile 
DragoonFighter, а простое кодирование и шифрование прменяются совсем для разных целей. 
В  контексте Ваших постов речь шла о шифровании, и предлагаемые методы кодирования для этого не предназначены.

Да, вы правы, ну короче я даже не так уж и далеко зашёл чтобы применять base64. Вот моя программа, для тех кто интересуется. 
(Она не полная, это ещё только половина программы. )

Я закинул на ссылку код, а то тут он слишком большой. 
main.cpp

Можете скопировать и компилировать, уведите что я имею в виду. 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
cutwater
Дата 2.2.2009, 23:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



стрелять колотить.... челюсть до сих пор на полу....
жаль цензура не позволяет сказать все что можно по поводу кода.... я в шоке.

Добавлено через 1 минуту и 36 секунд
При чем это только еще половина.


--------------------
user posted image
PM MAIL   Вверх
xvr
Дата 2.2.2009, 23:19 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(DragoonFighter @ 2.2.2009,  23:10)
Да, вы правы, ну короче я даже не так уж и далеко зашёл чтобы применять base64. Вот моя программа, для тех кто интересуется. 

Я закинул на ссылку код, а то тут он слишком большой. 
main.cpp

Да уж  smile 
Во первых, рекомендую слово 'crypt' оттуда убрать - ибо это не 'crypt' ни в каком смысле. 
Во вторых, у вас китайцев в роду не было? Уж очень стиль похож, хуже только 'индийский'.
В третьих, что получилось - понятно (кошмар на улице вязов), а вот что нужно было получить - совершенно не ясно  smile 
Цитата

(Она не полная, это ещё только половина программы. )
Половины вполне достаточно  smile 
PM MAIL   Вверх
pan2004
Дата 2.2.2009, 23:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



ужас... два ифа на полсотни вариантов чего стоят... Причем, это последовательность if оф, а даже не if...else!!! Да, да, программа будет проверять все полсотни условий в цикле, даже когда один уже сработал и больше не нужно. Уже не говоря о том, что ВСЕ ифы можно просто выкинуть и написать без них.
Аффтар, ознакомься хотя бы с тем, как строки и символы представляются в памяти компьютера? Правильно, числами.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
mes
Дата 2.2.2009, 23:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



DragoonFighter, вот переписал часть Вашего кода на скорую руку - кодирование символов на основе таблице
заполнять таблицу до конца конечно же я не стал и оставил Вам для разминки.
Код


const std::string mtbl[][2] = { "a","00"
                               ,"b","01"
                               ,"c","02"
                               ,"d","03"
                               ,"e","04"
                              };


std::string code (std::string src)
{
    std::string res;
    res.reserve(src.size()*2);
    for (unsigned j = 0; j<src.size(); ++j )
    for (unsigned i=0; i<sizeof(mtbl)/sizeof(char*)/2; ++i)
    if (src.compare(j,1, mtbl[i][0])==0) { res +=mtbl[i][1]; break; }
    return res;
}
std::string encode (std::string src)
{
    std::string res;
    res.reserve(src.size()/2);
    for (unsigned j = 0; j<src.size(); j+=2 )
    for (unsigned i=0; i<sizeof(mtbl)/sizeof(char*)/2; ++i)
    if (src.compare(j,2, mtbl[i][1])==0) { res +=mtbl[i][0]; break; }
    return res;
}

int main()
{
    std::string str = code ("abcde");
    std::cout <<str<< std::endl;
    std::cout << encode(str)<< std::endl;

    return 0;
}

заполняйте таблицу тестируйте и улучшайте  smile 

Это сообщение отредактировал(а) mes - 2.2.2009, 23:51


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 2.2.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(pan2004 @ 2.2.2009,  23:24)
ужас... два ифа на полсотни вариантов чего стоят... Причем, это последовательность if оф, а даже не if...else!!! Да, да, программа будет проверять все полсотни условий в цикле, даже когда один уже сработал и больше не нужно. Уже не говоря о том, что ВСЕ ифы можно просто выкинуть и написать без них.
Аффтар, ознакомься хотя бы с тем, как строки и символы представляются в памяти компьютера? Правильно, числами.

Цитата

... что ВСЕ ифы можно просто выкинуть и написать без них.


А по подробнее можно? 

Извините меня, но я ещё новичок и это первый вариант который пришёл мне в голову.

Да код очень длинный, но честно говоря я пока и не думал как, и вообще что его можно написать по другому. 
Может кто объяснить в чём моя ошибка и из за чего всё так плохо выглядит? 
За раннее спасибо.

Добавлено через 4 минуты и 58 секунд
Цитата(mes @ 2.2.2009,  23:51)
DragoonFighter, вот переписал часть Вашего кода на скорую руку - кодирование символов на основе таблице
заполнять таблицу до конца конечно же я не стал и оставил Вам для разминки.
Код


const std::string mtbl[][2] = { "a","00"
                               ,"b","01"
                               ,"c","02"
                               ,"d","03"
                               ,"e","04"
                              };


std::string code (std::string src)
{
    std::string res;
    res.reserve(src.size()*2);
    for (unsigned j = 0; j<src.size(); ++j )
    for (unsigned i=0; i<sizeof(mtbl)/sizeof(char*)/2; ++i)
    if (src.compare(j,1, mtbl[i][0])==0) { res +=mtbl[i][1]; break; }
    return res;
}
std::string encode (std::string src)
{
    std::string res;
    res.reserve(src.size()/2);
    for (unsigned j = 0; j<src.size(); j+=2 )
    for (unsigned i=0; i<sizeof(mtbl)/sizeof(char*)/2; ++i)
    if (src.compare(j,2, mtbl[i][1])==0) { res +=mtbl[i][0]; break; }
    return res;
}

int main()
{
    std::string str = code ("abcde");
    std::cout <<str<< std::endl;
    std::cout << encode(str)<< std::endl;

    return 0;
}

заполняйте таблицу тестируйте и улучшайте  smile

А, вот теперь я понял в чём была проблема. 
Я вам очень благодарен! Спасибо! На первый вид я ещё не совсем понял как всё работает, но посижу пару часиков и про анализирую. Большое спасибо!
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 3.2.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(pan2004 @  2.2.2009,  22:24 Найти цитируемый пост)
Аффтар, ознакомься хотя бы с тем, как строки и символы представляются в памяти компьютера

Цитата(DragoonFighter @  2.2.2009,  22:52 Найти цитируемый пост)
Может кто объяснить в чём моя ошибка и из за чего всё так плохо выглядит

ну вот Вам еще один кодик из двух строчек на рамышление :

Код

    for (char i=' '; i<'z'; ++i)
    std::cout << (char)i << " " << (int) i << std::endl;
 
ответьте себе на вопрос как работает цикл л с буквами,
откуда берутся цифры в консоли, 
как они соответствуют буквам напротив их.

желаю приятных эксперементов  smile

Добавлено через 2 минуты и 48 секунд
Цитата(DragoonFighter @  2.2.2009,  22:52 Найти цитируемый пост)
А, вот теперь я понял в чём была проблема. 

на строчки   res.reserve(...); не отвлекайся, можешь их вобще закоментировать , на результат не скажется..
а описание compare здесь : http://www.cplusplus.com/reference/string/...ng/compare.html

Это сообщение отредактировал(а) mes - 3.2.2009, 00:02


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 3.2.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Благодарю mes!
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1614 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.