|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2015, 12:27 | #1 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
Как проще конвертировать строку с текстом в бинарную строку, а затем наоборот
Я уже находил ответ на этот вопрос здесь http://programmersforum.ru/showthread.php?t=283376
Но теперь ситуация интереснее. Сейчас я рассматривал код, представленный Stilet, еще раз, и смотрите: Код:
Посмотрел - бинарные данные, выданные кодом Stillet, совпадают с бинарными данными, полученными после последнего мною сделанного алгоритма до преобразования обратно в текст. Еще раз обращу внимание: в одной программе "передача", в другой - "прием", в передатчике есть сигналы, аналогичные сигналам в приемнике, которые можно сравнить между собой. Так вот, я понял, что проблема именно в том, что "нули" и "единицы" у меня получились верно, только переданный текст я по ним восстановить не могу. И тут я понял. У меня первый символ "Э" в ASCII таблице занимает 16 бит. Я же получил лишь 8 бит после работы вышеуказанного кода (где 8 вместо 16). 101101 или 45. Это соответствует другому символу в ASCII таблице, то есть получается, что нужно брать по 16 бит. А если брать по 16 бит, то вышеуказанный код, почему-то, обнуляет высшие 8 разрядов, получается просто "0000000000101101". Это так, чтобы видно было, что я старался Вы можете забыть все вышесказанное, и просто расскажите снова, как проще и быстрее всего конвертировать текстовую строку в строку нулей и единиц? А потом сделать из нее заново текстовую строку. |
06.11.2015, 13:24 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
я в вашей прошлой теме же Вам давал ссылочку на тему, где строка конвертируется в массив байт и обратно.
Вы не ходили по ссылке?! конвертировать строку из UTF-8 в строку из ноликов и единичек можно так: Код:
Код:
а если не секрет, зачем Вам конвертировать именно в бинарное представление? Вы же в 16 раз увеличиваете объём передаваемой информации!! Последний раз редактировалось Serge_Bliznykov; 06.11.2015 в 13:38. |
06.11.2015, 13:44 | #3 | |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
Цитата:
У меня на выходе передатчика вч-тракт, усилитель, антенна, по идее. Хотя бы выход видеокарты - то есть динамик. И мне привычнее делать обработку именно ноликов и единиц. Например, для относительной фазовой манипуляции мне нужно сравнивать каждые 2 соседних бита между собой. Ну вот как это проще на C сделать? Я уже думал про массивы бит (True/False Array)... И просто так исторически сложилось, что я начал работать со строкой, хотя я понял, что это медленно. Насчет GetString я понял, а дальше - не знаю. Последний раз редактировалось Krasi; 06.11.2015 в 14:05. |
|
06.11.2015, 14:09 | #4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Вы плодите темы, а потом задаёте вопрос, на который в другой теме уже получили ответ?! ладно, если Вам тяжело посмотреть в своей прошлой теме, мне это сделать не тяжело. копирую код из вашей прошлой темы: sInput строка, состоящая из ноликов и единичек. Код:
ещё вопросы?.. |
|
06.11.2015, 15:10 | #6 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
Нет, понял. Не все получилось!!! Мне нужно, чтобы каждый символ преобразовывался в определенное число бит. Если уж 16 - то чтобы каждый символ занимал 16 бит. У меня было число бит 1800 при 8 бит на символ, стало 2432. А мне уж тогда все 3600 бит надо! Как можно четко детерминировать здесь число бит на каждый символ?
|
06.11.2015, 15:15 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
каждый символ занимает столько бит, сколько ему отведено в заданной вами кодировке. в одной это может быть 7 бит, в другой - восемь, в третьей 16, 32 бита и т.д. для Вас открытие, что в unicode разные символы занимают РАЗНОЕ число байт?!! И язык программирования (при правильном указании кодировки) позволяет Вам этого не знать, он все внутренние преобразования берёт на себя, избавляя от этого программиста. Вас это чем-то не устраивает?! |
|
06.11.2015, 15:28 | #8 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
Просто я встретился с ошибкой, что у меня эти бинарные биты дальше обрабатываться моим кодом не хотели. Код я пишу уже месяц, поэтому мне проще разобраться сначала, что случилось. Изначально я генерировал кратное 1800 количество символов (затем по очереди обрабатывал каждые 1800) 0 и 1 в строке "бинарных данных". Сейчас смотрю - эта длина сейчас 3304 при моем исходном тексте.
Я посмотрел, 1 символ "Э" занимает 16 бит, вроде, вот я и решил, что это 16-битная конвертация. Мне нужно, чтобы итоговое число обязательно делилось на 3 - это, по ходу дела, единственное препятствие. Тогда считаем 3304/3 = 1101,333... - вот в этом проблема, я думаю. Как можно исправить? Короче, пишу от начала до конца, как есть. Есть очень длинная строка A. Я ее разделяю на несколько строк B, сразу нельзя сказать, на сколько, но длина каждой равна 225. 225*8 = 1800. Вот такое число символов я хочу обрабатывать за раз. Это обязательно пока что, потому что я туго соображаю, как исправить мой код не под 1800 символов. Я там и на графики вывожу по 1800, и у меня длина символа в моей задачи фиксирована (1800 - 4 символа, 450 - 1 символ, после преобразования - 150 единиц в одном моем связном символе, не больше, не меньше), и нельзя ее менять. Массив Bdig - это 0 и единицы в виде строчки, которые генерируются кодом, который Вы помогли освоить. Таким образом, 225*8 - это длина Bdig, и я хочу ее именно 1800. Если 225*16, то получится 3600. Тогда я могу передавать за раз уже не 225 символов, а 112.5. Ок, я уже не заморачиваюсь, можно вот так сделать? Последний раз редактировалось Krasi; 06.11.2015 в 15:44. |
06.11.2015, 15:40 | #9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
добавляете в конец текста однобайтовые символы, пока число бит не станет кратным трём. Это, например, символ " "(пробел) или "." или "@" или любой другой из первой половины ASCII таблицы. Вот, например, к вашей строке длиной 3304 бит нужно добавить один 8-мибитный символ, чтобы число бит стало кратным трём. p.s. ещё раз повторю. Вы идёте не в ту сторону. Заблудитесь! |
|
06.11.2015, 15:48 | #10 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
Да я бы хотел пока сделать с 16-битными числами. Чтобы у меня длина получалась не 3304, а 3600. Чтобы даже пустой символ в строчке обозначался 8-ми битами. Так проще пока. А то добавлять еще что-то - это костыль будет в моем случае, мне надо всего-то навсего передать строку неизвестной длины. А разбиваю я ее на строки длиной 255 символов только потому, что изначально рассчитал, чтобы у меня было 4 моих символа, в каждом из которых обязательно по ТЗ должно быть 450 бит информации. Разве сложно так намудрить пока?
Последний раз редактировалось Krasi; 06.11.2015 в 16:00. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не получается перевернуть наоборот строку символьного массива. | Zaza7 | Общие вопросы C/C++ | 8 | 30.10.2012 13:40 |
Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 05.07.2012 20:27 |
Конвертировать строку из ANSI в UNICODE | Миша | Общие вопросы Delphi | 8 | 28.12.2009 18:23 |
Как при нажатии на строку в Listbox передавать нажатую строку в переменную | Михаил Юрьевич | Общие вопросы Delphi | 5 | 16.03.2009 12:59 |