Шестнадцатеричное представление для char

Тема в разделе "LANGS.C", создана пользователем lazy, 10 фев 2011.

  1. lazy

    lazy New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    7
    Приветствую!
    Знаю, что вопрос очень простой, но сколько ни гуглил, осилить не могу.

    Собственно вопрос - есть у меня переменная, например char или int. Как мне получить строку ее представления в шестнадцатеричном виде?

    Очень хорошо это получается у функции printf,
    Код (Text):
    1. #include <stdio.h>
    2.  
    3. int main(int argc, char *argv[])
    4. {
    5.     char mychar = ' ';
    6.    
    7.     printf("hex : 0x%x\n", mychar); // выводим "hex : 0x20"
    8.  
    9.     return 0;
    10. }
    но она сразу выводит представление на экран, а мне бы получить его внутри кода для собственного баловства.
     
  2. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    sprintf(pbuffer, "0x%X", mychar);
    pbuffer - указатель, куда будет выведена строка с hex-представлением твоего char-а

    гугляться подобные вещи следующим образом:
    1. У вас есть функция printf, она подходит, но не совсем. Вы вводите в гугл "msdn printf". Проходите по первой ссылке
    2. Читаете описание функции, в самом низу страницы есть смежные функции, которые используются либо в место с описываемой либо очень похожи по функционалу, но с небольшим отличием. Их обычно внизу страницы 5-10 штук.
    3. Нажимаете на каждой и ищите то, что вам нужно. Занимает весь поиск минуты 2.
     
  3. lazy

    lazy New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    7
    Большое спасибо, dyn! Это именно то, что нужно.
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
  5. GRRRLPower

    GRRRLPower New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2010
    Сообщения:
    46
    Если необходим c++, то:

    Код (Text):
    1. #include <iostream>
    2. #include <string>
    3. #include <sstream>
    4.  
    5. int main()
    6. {
    7.     std::string hexstr;
    8.     unsigned int number = 123;
    9.  
    10.     {
    11.         std::stringstream s;
    12.         s << "0x" << std::hex << number;
    13.         hexstr = s.str();
    14.     }
    15.  
    16.     std::cout << hexstr << std::endl;
    17.  
    18.     return 0;
    19. }
     
  6. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    Прошу прощения за некропост, но очень хочется вставить свои 5 копеек, мой метод правда предполагает получение десятичного представления числа, но разве это пролема?
    Код (Text):
    1. #include <iostream>
    2. using namespace std;
    3. void main()
    4. {
    5.     char U='#';
    6. int K;
    7.     _asm
    8.     {
    9.         mov eax, 0
    10.         mov al, U
    11.         mov K,eax
    12.     }
    13.     cout<<K<<endl;
    14. }
     
  7. rat4

    rat4 Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    30
    Больно бить по рукам.
     
  8. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    Вот елки - токмо забрел на форум (давно здесь не был), и уже успел получть по рукам. И главное непонятно за что, ведь код то работает, я просто по ходу дела, сам с подобными вещами сталкивался, вот и опытом делюсь.
     
  9. rat4

    rat4 Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    30
    void main() - это уже нерабочий код
     
  10. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    Запусти Visual Studio и проверь! Из всех компиляторов void main() не переваривает только miniGW, но это уже флуд пошел.
     
  11. rat4

    rat4 Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    30
    Оно идёт под вайном? ;)

    Зачем мне это проверять, если в стандарте чётко написано?
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    я бы сказал, из всех компиляторов void main() переваривает только студия... например gcc следует стандарту:
    на этот код страшно смотреть... ассемблерная вставка вообще никаким боком не к месту...

    таки да)))
     
  13. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    кошерней так

    #include <iostream>
    #include <string>
    #include <sstream>

    int main()
    {
    std::string hexstr;
    unsigned int number = 123;

    {
    std::stringstream s;
    s << std::hex << std::showbase << number;
    hexstr = s.str();
    }

    std::cout << hexstr << std::endl;

    return 0;
    }