Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > как преобразовать элемент TStringList в char


Автор: =Женек= 8.2.2012, 18:29
Господа дана строка из TStringList: 

Dat->Strings[i].SubString(4,2);

Она содержит два символа, скажем "FF". Как мне получить переменную типа unsigned char, то есть 255 или символ с соответствующим кодом?

Автор: 586 8.2.2012, 19:22
Код
String s = Dat->Strings[i].SubString(4,2)
char a = s[1];     // и обрати внимание, что символы индексируются в String с единицы а не с нуля
char b = s[2];

Автор: =Женек= 8.2.2012, 19:36
По-моему не то.. в а будет число, означающее номер в таблице ASCII символа s[1]
Впрочем, я уже проблему решил написав функцию. Я просто думал, что есть решение поизящней, типа HexStringToChar(string s, unsigned char c)

Автор: 586 8.2.2012, 19:41
А, понятно. Есть уже готовая функция - HexToBin:
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char buf[3];
    HexToBin("FFFF00", buf, 3);
    Caption = buf;
}

Автор: =Женек= 8.2.2012, 20:04
Посоветовали сделать так:
unsigned char n = strtol("A5" , NULL, 16);//n=165

Получилось.

Но помогите заставить работать это:
Код

TStringList *Dat = new TStringList;
Dat->LoadFromFile("d:/hex.hex");//загрузка файла

unsigned char n = strtol( Dat->Strings[1].SubString(2,2) , NULL, 16);//n=165



Автор: 586 8.2.2012, 20:30
unsigned char n = strtol( Dat->Strings[1].SubString(2,2).c_str() , NULL, 16);

Автор: =Женек= 8.2.2012, 20:32
Пытался сделать так.
Выдает:
[BCC32 Error] SMD_Reflow.cpp(1167): E2034 Cannot convert 'wchar_t *' to 'const char *'
[BCC32 Error] SMD_Reflow.cpp(1167): E2342 Type mismatch in parameter '__s' (wanted 'const char *', got 'wchar_t *')

Автор: 586 8.2.2012, 21:01
unsigned char n = wcstol( Dat->Strings[1].SubString(2,2).c_str() , NULL, 16);

Автор: =Женек= 8.2.2012, 21:06
Опаньки, спасибо, работает!


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)