Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Конвертировать String в Char [ VC++ ] (https://forum.antichat.xyz/showthread.php?t=44313)

GlOFF 12.07.2007 18:59

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

В общем из текста "2D" получить число 0x2D , Подскажите плз :)

Ni0x 12.07.2007 19:39

>>В общем из текста "2D" получить число 0x2D
функция atoi() тебе в помощь

GlOFF 12.07.2007 19:46

Ni0x Дай примерчик! На Builder C++ будет работать?

NetMan 12.07.2007 19:52

http://www.daniweb.com/code/snippet470.html

GlOFF 12.07.2007 20:04

NetMan - Немного не то!
Ni0x - atoi() - это AnsiString To Integer ?

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

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

NetMan 12.07.2007 20:16

Смотри здесь, правда тебе придётся немножко переделать.

GlOFF 12.07.2007 20:20

NetMan спасибо ;)! Я так не хотел отдельную функцию писать :(

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

Ni0x 12.07.2007 20:39

Цитата:

Ni0x - atoi() - это AnsiString To Integer ?
Это для конвертации char, в сишном рантайме есть целый набор функций для конверта разных типов данных.
Цитата:

String A = "2D";
unsigned char B = atoi(A);
дело в том что string тип данных из std(библиотека заточена под С++), а atoi() предназначена для работы с char. Для определения строк лучше используй в зависимости от случая:
char *str="antichat";
char str[]="antichat";
а string не рулит ;)

_Great_ 12.07.2007 20:41

sscanf юзай:

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

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

// теперь byte = 0x22

NetMan 12.07.2007 20:53

Можно заюзать функцию strtol:
Код:

  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);



Время: 18:18