Конвертировать String в Char [ VC++ ]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GlOFF, 12 Jul 2007.

Thread Status:
Not open for further replies.
  1. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Конвертировать Hex-String в Char [ C++ ]

    Имеется,к примеру, следующая строка:
    String A = "2D";
    Как превратить это в unsigned char, т.е. чтобы получить:
    unsigned char B = 0x2D;

    В общем из текста "2D" получить число 0x2D , Подскажите плз :)
     
    #1 GlOFF, 12 Jul 2007
    Last edited: 12 Jul 2007
  2. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    >>В общем из текста "2D" получить число 0x2D
    функция atoi() тебе в помощь
     
    1 person likes this.
  3. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Ni0x Дай примерчик! На Builder C++ будет работать?
     
  4. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    NetMan - Немного не то!
    Ni0x - atoi() - это AnsiString To Integer ?

    String A = "2D";
    unsigned char B = atoi(A);

    Дает нулевой результат в unsigned char B!
    Если же взять строку "22" к примеру, то в получим в unsigned char B 0x16 , а не 0x22 как хотелось бы...
     
  6. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Смотри здесь, правда тебе придётся немножко переделать.
     
    1 person likes this.
  7. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    NetMan спасибо ;)! Я так не хотел отдельную функцию писать :(

    Мне что-то не вериться, что С++ такой богатый и функциональный язык, а такой казалось бы простой процедуры конвертации как-то выходит и нет :confused:
     
  8. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Это для конвертации char, в сишном рантайме есть целый набор функций для конверта разных типов данных.
    дело в том что string тип данных из std(библиотека заточена под С++), а atoi() предназначена для работы с char. Для определения строк лучше используй в зависимости от случая:
    char *str="antichat";
    char str[]="antichat";
    а string не рулит ;)
     
  9. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    sscanf юзай:

    string hex = "0x22";
    unsigned char byte;

    sscanf( hex.c_str(), "0x%x", &byte);

    // теперь byte = 0x22
     
  10. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Можно заюзать функцию strtol:
    Code:
       string str = "2A";
       char *endptr;
       unsigned char lnumber;
    
       lnumber = strtol(str.c_str(), &endptr, 16);
       printf("string = %s  long = %x\n", str.c_str(), lnumber);
     
  11. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    было бы неплохо сделать новый класс унаследованный от string имеющий подобные фунцкии
     
  12. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Вообщем с проблемой разобрались, а флудить все горазды. Поэтому закрываю
     
Loading...
Thread Status:
Not open for further replies.