![]() |
|
Модераторы: bsa |
![]()
|
|
| admsasha |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
есть массив hex значений вида
std:string data="656667686970"; Нужно из этого получить тот же std::string со символами. std::string result="abcdef" Как сделать преобразование из int a=65 я знаю, но как string "F4" или "DB" в этот int правильно сконвертить не знаю. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
itoa последним параметром ставишь 16
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| admsasha |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
У меня,например, не поддерживается. (gcc версия 4.4.1) Добавлено через 12 минут и 19 секунд Пока сделал через sscanf
в hex читаю по два символа из строки |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Как-то так (без проверок на ошибки):
Это сообщение отредактировал(а) bsa - 11.1.2012, 13:09 |
|||
|
||||
| admsasha |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
ой, что-то сильно сложно. data - это std::string ?, Но на сколько я помню порядок символов не гарантируются (могу ошибаться), так что использовать data[i] нельзя
хорошо, чем вот такой код плох ?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
http://liveworkspace.org/code/5b3ff759aa91...7407b4ee7afe975 это то, что ты хотел ? скажи, что именно в результате должно получиться в строке result исходя из твоего же примера символ с кодом 0x2A, затем символ с кодом 0x64, затем символ с кодом 0x44 и т.п. ? если да, то код вроде правильный, за исключением того, что если в исходной строке будет 0x00, то все дальнейшие символы будут проигнорированы -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
этот код на основе твоего в первом посте. названия переменных те же. порядок символов чего? почему нельзя использовать data[i]? ты что-то с чем-то путаешь. если у объекта метод/оператор есть, значит его можно использовать. И этот код работает |
|||
|
||||
| admsasha |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
Да, вывод правильный. Известно, что 0x00 не будет.
http://lib.rus.ec/b/191841/read Вот это имелось введу...
|
||||||
|
|||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
а где ты видишь у bsa требование к непрерывности данных ??? оператор [] гарантирует, что он вернёт i-й элемент. Что и требовалось -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| admsasha |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
borisbn, Я сразу указал, что не уверен в этом, просто читал о чем-то подобном. Можно тогда уточнить, это имеется введу. Когда это проявит себя?
|
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
в этом случае c[ 1 ] совершенно необязательно будет указывать на 4. Если же сделать так
то всё будет OK, т.к. c_str() уже гарантирует непрерывность строки -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
То что string не гарантирует это только в документации написано. На самом деле реализовать стринг через тот же deque будет совсем нетривиально, потому что c_str() является константным методом. Т.е. внутри стринга кроме хранилища символов должен быть еще и mutable указатель на область памяти, куда будет пихаться результат работы c_str()... Я очень сильно сомневаюсь, что кто-то будет так реализовывать. Значительно проще сделать в непрерывной области и с 0-м на конце. В этом случае c_str() имеет константную сложность.
Но это так, отступление. Если в документации не написано, что "непрерывность гарантируется" (как для vector) или написано обратное, то надеяться на "авось" нельзя. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Видел где то реализацию string, которая хранила последовательность сегментов символов (ну и до кучи реализовавала COW). Реализация была направленна на эффективную работу с арифметикой строк (конкатенация и выделение подстрок). |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
эх а на асме эта конверсия в пару строчек получится
написать? ))) -------------------- |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |