Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > int to binary - как конвертировать в бинарный? |
Автор: DragoonFighter 27.1.2009, 21:45 | ||
Здравствуйте Программисты, мне нужно скажем int=123; преобразовать в бинарный код. Я искал в гоогле и нашёл очень хорошую и рабочую функцию:
Всё работает прекрасно! Но есть одна проблема. Этот бинарный код мне нужно преоброзовать снова в int. То есть: ввод 123 вывод 1111011 и это число записывается в int. Как это сделать в самом void я знаю, но мне нужно создать этот int в main а так как я незнаю и не могу не где найти как вытащить int из void и засунуть его в int в main, мне нужна функция которая полностью работает в main. Я ну думаю что это можно сделать с while() поскольку я пробовал всё что мог и не чего не вышло, но если это возможно, то прошу пожалуйста пример с whiel(). За ранние спасибо! Надеюсь я не очень плохо выразился? |
Автор: destrd 27.1.2009, 21:54 |
Ну переведите в строку, а потом типа atoi с основанием 10 |
Автор: DragoonFighter 27.1.2009, 22:03 | ||
Это как? Можно пример? |
Автор: GoldFinch 27.1.2009, 22:42 |
бгг тема учите системы счисления и не задавайте глупых вопросов %) Добавлено через 52 секунды а код в 1м посте однозначно жжот))) |
Автор: mes 27.1.2009, 22:58 | ||
вывод целочисленного числа числа в двоичной системе:
ну а в остальном не хочется Вас разочаровывать, но правда дороже ![]() |
Автор: DragoonFighter 27.1.2009, 23:19 | ||||
Вот, как рас то что искал. Благодарю! А можно изменить общую длину так, чтобы так много нулей не было. То есть чтобы длинна вывода зависела от полной длинны ввода. Например: int 10: вывод: 010100000000000000000000000000000 чтобы вывод был: 0101 а если int = 9876543210 то чтобы вывод был не: 010111100000000000000000000000000 а: 0101111 |
Автор: xvr 28.1.2009, 17:41 | ||||||
Угу, только задом-наперед ![]()
|
Автор: DragoonFighter 28.1.2009, 19:12 | ||||||||||||||
Да, я уже переделал задом на перёд, но всё равно спасибо! Добавлено @ 19:14
Класс благодарю! Спасибо вам за помощь! Мне надо было использовать sizeof(). Огромное спасибо! Один вопрос: зачем cout << "0"; и cout << "b"; ? |
Автор: mes 28.1.2009, 21:24 |
закомментируй, посмотри на результат, и сравни с некомментированным результатом ![]() |
Автор: DragoonFighter 28.1.2009, 21:40 | ||
Теоретически я могу убрать "b"? А ноль просто для начального старта или как? Кратко: Можно их убрать, чтобы были просто буквы и только бинарный код, или? Добавлено через 1 минуту и 4 секунды Так, мне ещё 3 поста и я могу репутацию ставить. ![]() |
Автор: mes 28.1.2009, 21:48 | ||
да, "b" поставлен для "красоты". во первых во вторых :вначале идет поиск значимого бита и с него начинается вывод, и если значащий бит не найден (при n==0) то выводить нечего и следовательно этот ноль является "опорным"
не понял о чем речь. |
Автор: DragoonFighter 28.1.2009, 21:59 |
![]() Ну а насчёт краткого: Имел в виду чтобы были только цифры. Благодарю mes! Выручили! |
Автор: mes 28.1.2009, 22:12 | ||||||||
из за второй причины, необязатльно чтоб ноль выводился впереди всегда . можно например дополнить код условием, тогда :
a я чуть голову не поломал : ![]() ![]() |
Автор: DragoonFighter 28.1.2009, 22:50 |
![]() ![]() Да я так и сделаем с условием. Благодарю ещё раз! Вопрос полностью решён! |
Автор: mes 28.1.2009, 23:28 | ||
приведенный выше код содержит ошибку ![]() вот исправленный вариант :
|
Автор: DragoonFighter 28.1.2009, 23:49 | ||||||
![]()
Вот так выглядит вся прога. Теоретически, не токая уж и важная ошибка.... А интересно, сколько цифр можно запихать в int? Я раньше в книге читал что оно не большое, то есть ограничено. Но забыл на сколько, мне нужно где то около 1 миллиарда цифр. |
Автор: pan2004 28.1.2009, 23:54 |
32 двоичных разряда, обычно. Это примерно 10^9 1 миллиард десятичных цифр? Это уже если не на гигабайты, то на сотни мегабайт ОЗУ точно. |
Автор: mes 28.1.2009, 23:55 | ||
у меня в глазах двоится или в коде действительно цикл вложен сам в себя ?? ![]() а также зачем int b; ? Добавлено через 2 минуты и 53 секунды
|
Автор: mes 29.1.2009, 00:15 |
я думаю имелось ввиду, что нужна возможность вместить значение миллиард. http://www.cplusplus.com/reference/clibrary/climits/ |
Автор: DragoonFighter 29.1.2009, 00:15 | ||||||||
Я пишу программку, которая весь текст, то есть всё что вводят превращает в цифры, в бинарный код, потом сокращает в буквы, в hex и снова в бинарный. Так можно например кодировать файлы, e-mail, текст чата, итд. При этом засуну эту функцию в программу которая создаёт пароль. Мне нужен пароль на 200gb его на жесткий диск и этим паролем я закрою мои приватные данные. Эта идея была взята с радио активной станции в России. Там закодировали один важный файл несколькими терабайтам длинным паролем. Это причина почему я хотел знать сколько вмещается в int. А так конвертирование в бинарный код мне нужно для кодирование текста для типа приватного чата, чтобы если на пример мусара перехватят канал, чтобы им хрен что от моего текста понятно было. Ну, что то типа того. Добавлено через 2 минуты и 52 секунды
Ай тфу блин, всё вместе ляпнул... не, извините, сплю уже, ![]() b не нужно, и да ваш правильный код тот что и у меня. ![]() Добавлено через 6 минут и 45 секунд
Ну предётся сделать while() чтобы ULONG_MAX Maximum value for an object of type unsigned long int 4294967295 был умножен столько раз, чтобы вышло минимум 1 миллион. Ну это так, просто для любопытства и интереса испробовать ![]() Нечего серьёзного. |
Автор: mes 29.1.2009, 00:23 | ||
нда.. может лучше почитать вначале книжки, тогда возможно эти наполеновские планы превратятся в реальные цели. ![]() любое число или буква уже и так хранится в двоичном виде, а то что std::cout выводит число в десятичном виде или как букву, так это проявление работы функции, которая выводит переменную в удобном для пользователя виде. остальное комментировать не вижу смысла на текущем этапе. |
Автор: DragoonFighter 29.1.2009, 00:39 | ||||
Да, это понятно, но я перевожу буквы в свои цифры. У меня в принципе всё для кодирования готово! Просто осталось создать чат, но этим займёмся позже, потому что вы правы, для начала надо читать книги! Ну, пока у меня только одна проблема была, переделать числа в бинарный. Теперь всё пока идёт дальше по тихонько. Да и вообще это всё я пробую новые функции которые я изучаю. Скажем во попалась sizeof() сразу делаю с ней пример. Ну вот такой пример и в голову попал пере конвертировать цифры в бинарный. Короче всё для знания и изучения нового. Огромное спасибо вам! |
Автор: 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? |
Автор: DragoonFighter 31.1.2009, 00:16 | ||
Хорошая информация! Благодарю! Насчёт перевода, это просто своё кодирование, просто для изучения и пробы. Просто чем больше разных переводов, на пример с букв в инт с инта в бинах с бинар в хекс и сного в бинар и т.д. К стате base64 я уже тоже использовал но поскольку тут только 64 (0-63) символов, я создал свой, 90 символов. Просто буквы в цифры, потом эти цифры с помощью например бинарного и хекса закодировать. |
Автор: mes 31.1.2009, 00:35 | ||||
и все таки мне кажется, что Вы неправильно "воспринимаете происходящее". |
Автор: cutwater 31.1.2009, 01:38 |
DragoonFighter, я согласен с mes, Вы что-то явно путаете. |
Автор: DragoonFighter 31.1.2009, 13:29 |
Ну, как я понял base64 кодирует символы. То есть на пример 123 = MTIz Правильно? |
Автор: xvr 31.1.2009, 19:14 | ||
Оно символы не КОДИРУЕТ, а всего лишь переводит в другой вид. Для целей защиты информации (что бы враги не догадались) оно СОВЕРШЕННО непригодно. Равно как и другие способы представления, типа перевода в бин/хекс/хз куда. Тогда уж проще упаковать исходный текст - такое кодирование, просто закачаешся ![]() У всех систем шифрования есть одно неприменное требование - возможность расшифровать сообщение должно базироваться ТОЛЬКО на знании ключа. Т.е. злоумышленник может иметь все, вплоть до исходных текстов программ шифрования и дешифрования, но без ключа он расшифровать все равно не сможет |
Автор: mes 31.1.2009, 19:32 |
Поправка : Кодирует, но не шифрует. ![]() DragoonFighter, а простое кодирование и шифрование прменяются совсем для разных целей. В контексте Ваших постов речь шла о шифровании, и предлагаемые методы кодирования для этого не предназначены. |
Автор: DragoonFighter 2.2.2009, 23:10 | ||
Да, вы правы, ну короче я даже не так уж и далеко зашёл чтобы применять base64. Вот моя программа, для тех кто интересуется. (Она не полная, это ещё только половина программы. ) Я закинул на ссылку код, а то тут он слишком большой. http://hack-crew.ath.cx/download/programming/Cpp/main.cpp Можете скопировать и компилировать, уведите что я имею в виду. |
Автор: cutwater 2.2.2009, 23:15 |
стрелять колотить.... челюсть до сих пор на полу.... жаль цензура не позволяет сказать все что можно по поводу кода.... я в шоке. Добавлено через 1 минуту и 36 секунд При чем это только еще половина. |
Автор: xvr 2.2.2009, 23:19 | ||||
Да уж ![]() Во первых, рекомендую слово 'crypt' оттуда убрать - ибо это не 'crypt' ни в каком смысле. Во вторых, у вас китайцев в роду не было? Уж очень стиль похож, хуже только 'индийский'. В третьих, что получилось - понятно (кошмар на улице вязов), а вот что нужно было получить - совершенно не ясно ![]()
![]() |
Автор: pan2004 2.2.2009, 23:24 |
ужас... два ифа на полсотни вариантов чего стоят... Причем, это последовательность if оф, а даже не if...else!!! Да, да, программа будет проверять все полсотни условий в цикле, даже когда один уже сработал и больше не нужно. Уже не говоря о том, что ВСЕ ифы можно просто выкинуть и написать без них. Аффтар, ознакомься хотя бы с тем, как строки и символы представляются в памяти компьютера? Правильно, числами. |
Автор: mes 2.2.2009, 23:51 | ||
DragoonFighter, вот переписал часть Вашего кода на скорую руку - кодирование символов на основе таблице заполнять таблицу до конца конечно же я не стал и оставил Вам для разминки.
заполняйте таблицу тестируйте и улучшайте ![]() |
Автор: DragoonFighter 2.2.2009, 23:52 | ||||||||
А по подробнее можно? Извините меня, но я ещё новичок и это первый вариант который пришёл мне в голову. Да код очень длинный, но честно говоря я пока и не думал как, и вообще что его можно написать по другому. Может кто объяснить в чём моя ошибка и из за чего всё так плохо выглядит? За раннее спасибо. Добавлено через 4 минуты и 58 секунд
А, вот теперь я понял в чём была проблема. Я вам очень благодарен! Спасибо! На первый вид я ещё не совсем понял как всё работает, но посижу пару часиков и про анализирую. Большое спасибо! |
Автор: mes 3.2.2009, 00:02 | ||||||
ну вот Вам еще один кодик из двух строчек на рамышление :
ответьте себе на вопрос как работает цикл л с буквами, откуда берутся цифры в консоли, как они соответствуют буквам напротив их. желаю приятных эксперементов ![]() Добавлено через 2 минуты и 48 секунд на строчки res.reserve(...); не отвлекайся, можешь их вобще закоментировать , на результат не скажется.. а описание compare здесь : http://www.cplusplus.com/reference/string/string/compare.html |
Автор: DragoonFighter 3.2.2009, 00:08 |
Благодарю mes! |