43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||||||||||||
1 | ||||||||||||||||
Как получить бинарный код символа?07.05.2016, 01:06. Показов 7877. Ответов 15
Метки нет (Все метки)
Я читаю txt в котором разные символы(без русских) типа такого 45h8giJDFJH
Я должен прочитать их и перевести их в бинарный код из 100101010101011000 А потом эти 0 и 1 я должен инвертировать примерно так Мне нужно только получить их символов двоичный код, я не знаю как((
0
|
07.05.2016, 01:06 | |
Ответы с готовыми решениями:
15
Как получить код символа unicode в std::wstring? Получить код Unicode из символа Как получить код символа? Как получить второй код символа |
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
07.05.2016, 01:26 | 2 |
0
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||
07.05.2016, 01:46 [ТС] | 3 | |||||
Renji, Это конечно хорошо, но что бы к этому перейти мне нужно сначала перевести.
Вот я тут пошарился и нашел кое что, пытался переделать, но работает странно В файле DRhe а на экране выводиться 01100101 Ни чего не понимаю
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
07.05.2016, 18:00 | 4 | |||||
Сообщение было отмечено ArxangelXA как решение
Решение
немного переделал последний вариант:
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||
08.05.2016, 02:26 [ТС] | 5 | |||||
Vort_, Спасибо)) Вот это да всего лишь чуть чуть изменили и все, я удивлен))
Добавлено через 7 часов 48 минут Vort_, А вот у меня вопрос, я не понял в файле один символ допустим 1. А на экран выводиться два кода 11001110 11001110 Почему? Код написан уже по инверсии, мне надо было бинарный инвертировать, вот поставил ~. Но почему два кода? и вообще правильно ли он выдает?
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
08.05.2016, 07:35 | 6 | |||||
Сообщение было отмечено ArxangelXA как решение
Решение
ArxangelXA, моя ошибка, прошу прощения.
проверка while (!F.eof()) неверна.eof возвращает true только после неуспешного чтения.соответственно, надо или такую проверку ставить в средину цикла или проверять непосредственно результат выполнения операции ввода:
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
|
08.05.2016, 13:44 [ТС] | 7 |
Vort_, Спасибо все работает))
0
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||
10.05.2016, 20:57 [ТС] | 8 | |||||
Vort_,
Тут как оказалось мне немного по другому нужно сделать, допустим 4 = 110010(11) тут последние 2 бита инвертируем а остальные первые 6 не трогаем. потом следующий символ g =10011000 инвертируем полностью. следующий 6 = 11001001 тоже весь инвертируем. дальше начинаем по такой же схеме последние два потом все. Получается читаем 3 символа в первом последние 2 инв. в следующих двух все инв. А потом все записываем в бинарный файл. Я точно не знаю как нужно написать, попробовал так но цикл не работает.
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
11.05.2016, 07:33 | 9 | |||||
Сообщение было отмечено ArxangelXA как решение
Решение
этот пример даже не собирается, поэтому не пойму откуда выводы о нерабочести цикла
но я могу пояснить решение на предыдущем примере:
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||
14.05.2016, 17:36 [ТС] | 10 | |||||
Vort_, Этот код хороший и работает все ок. Но мне тут сказали мол как этот код будет запускаться на каком нибудь старом гг... На машинке древней эти циклы будут считаться вечно. По этому сказали сделать побитово. Я нашел что это значит. Должно быть все банально просто. Я не совсем понял как это работает. пытался сделать что то вроде такого вроде. Но я не знаю как переменную А побитово инвертировать. Что бы инвертировались только 2 последних байта(без циклов и счетчиков).
Я не знаю как передать первый байт в первую переменную, второй байт во вторую переменную и 3 в третью. Потом два инвертировать сразу, а один побайтно расписать Нашел примеры в интернете но там задаются переменные
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
14.05.2016, 18:02 | 11 | |||||
Сообщение было отмечено ArxangelXA как решение
Решение
Вариант с тремя переменными не пройдёт если, к примеру, в файле будет 4 символа.
Я понял что требуется. И это не побитовый доступ. Это изменение всех битов переменной сразу. Сейчас напишу ещё вариант. Добавлено через 18 минут Вот: Надеюсь, я нигде не налажал
Но я не уверен что это стоит делать. По поводу решения: Используется операция инверсии (~) и операция исключающего ИЛИ (^). С инверсией, думаю, понятно, а вот таблица для ^ (XOR): 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 То есть, там где у второго операнда единицы, биты будут инвертированы, а там где нули - останутся как были. К примеру, 00110011 ^ 00000011 = 00110000
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
||||||||||||||||
15.05.2016, 02:55 [ТС] | 12 | |||||||||||||||
Vort_, Работает конечно все прекрасно. Вы просто мастер)) Честно завидую белой завистью))) Блин как это у вас получается все так писать и кучу разных вариантов. Я один то вариант написать не могу((( как так научится?((
И ваш код не совсем понимаю....(( Теперь у меня вопросы возникли. 1)Эту часть кода я могу удалить, если мне не нужно выводить на экран, так?
это нахождение 1 и 2 байта делением?
2) А почему int k = 128 почему именно 128? 3) Как проверить что bin записалось? я его в разных кодировках в блокноте открывал ни как все иероглифы(( 4) А почему с 3мя переменными нельзя? он бы 3 переменные заполнял 3мя байтами потом возвращался на начало программы к следующим 3мя байтам и так по кругу, нет что ли? Такая моя теория не прокатила бы? Символов там действительно не 3, там где то около 12т.))) 6т. строк по 24 символа в строке.
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
15.05.2016, 08:16 | 13 |
Сообщение было отмечено ArxangelXA как решение
Решение
да, и эту тоже:
printf(" "); тут используется нахождение остатка от деления, немного другая операция это сравнение находит байты с индексами 1, 2, 4, 5, 7, 8 и т. д. соответственно, в else ветку попадут индексы 0, 3, 6, ...это проверка определённого бита на равенство единице в цикле проверяются биты от старшего к младшему для этого используется операция & - побитовое Ицикл состоит из 8ми итераций - по количеству бит в байте k принимает значения:10000000 (128) 01000000 (64) 00100000 (32) 00010000 (16) 00001000 (8) 00000100 (4) 00000010 (2) 00000001 (1) Значение 128 позволяет проверить 7й бит, 64 - 6й бит (обычно биты считаются от младших к старшим) К примеру, если взять символ q :01110001 & 10000000 = 00000000 -> значит старший, 7й, бит равен 0 01110001 & 01000000 = 01000000 -> 6й бит равен 1 и т.д. для этого используются Hex-редакторы но можно глянуть и с помощью Visual Studio для этого в диалоге открытия файла ( Ctrl+O ) надо нажать на стрелочку, пририсованную к кнопке "Открыть", выбрать в выпавшем меню "Открыть с помощью" и в открывшемся списке выбрать "Двоичный редактор"Допустим, в файле четыре символа: 0123 .На первой итерации в a , b , c попадут 0 1 и 2 На второй - в a запишется 3 . Но что делать программе дальше, если файл закончился?
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
|
15.05.2016, 14:55 [ТС] | 14 |
Vort_, Спасибо)
А просто выйти из программы нельзя? при условий что инфа закончилась? это увеличение на единицу? А для чего? Что бы пропускать каждый третий байт?
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
15.05.2016, 15:00 | 15 |
Сообщение было отмечено ArxangelXA как решение
Решение
если добавить соответствующие проверки, то можно
но мне кажется, что такой вариант будет слишком громоздким это счётчик, увеличивающийся на единицу после каждого считанного байта по его значению определяется режим обработки байтов - или инверсия всех битов или только двух младших
1
|
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
|
|
15.05.2016, 15:07 [ТС] | 16 |
Vort_, Большое спасибо!!)) Вы очень мне помогли.
0
|
15.05.2016, 15:07 | |
15.05.2016, 15:07 | |
Помогаю со студенческими работами здесь
16
Как получить код символа из строки? Как получить код символа Unicode в VS как получить код символа в ASCII? Как можно получить ASCII код символа? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |