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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> string to hex 
:(
    Опции темы
setty
Дата 11.3.2007, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



     Здравствуйте. 
На днях меня попросили помочь решить проблемму которая состояла в том что имеется строка char *s в которой содержится какое либо шестнадцатиричное значение и надо перевести его в тип byte (aka unsigned char).
Мое решение было следующим:
Код

    char *s = "9e";
    unsigned char mb=0;
    if(*s<0x3a) mb+=*s-0x30;
    else mb+=*s-0x57;
    mb*=0x10;
    ++s;
    if(*s<0x3a) mb+=*s-0x30;
    else mb+=*s-0x57;

   после мне сказали что можно было решить проблемму побайтовым сдвигом, и хотя я понимаю вроде бы что это, но как таким образом можно решить подобную задачу?
   далее мне как молодому программисту было бы интерестно мнение более опытных касательно моего способа решения проблеммы и того как я его закодил.

PM MAIL   Вверх
SparF
Дата 11.3.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

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



sscanf Вам в руки, и пусть работает))


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
setty
Дата 11.3.2007, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



если я правельно понял то выглядеть все должно так
Код

    char *s="9e";
    int mb=0;
    sscanf(s,"%x",mb);

однако это приводит к ошибке времени выполнения.
PM MAIL   Вверх
zkv
Дата 11.3.2007, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(setty @  11.3.2007,  03:58 Найти цитируемый пост)
если я правельно понял то выглядеть все должно так

скорее так smile
Код

    char s[10];
    int mb=0;
    sscanf(s,"%x",mb);

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


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



А главное так:
Код

sscanf(s,"%x", &mb);
  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
zkv
Дата 11.3.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Dov @  11.3.2007,  08:20 Найти цитируемый пост)
А главное так:

да, действительно smile 
PM MAIL   Вверх
threef
Дата 11.3.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

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



со "сдвигами":
Код

char *s="9e";
int mb=0;
while(*s)
{
  mb=(mb<<4)+*s>'9'?*s-'A'+10:*s-'0';
  s++;
}

sorry, скобычки забыл

Это сообщение отредактировал(а) threef - 11.3.2007, 12:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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