Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Как преобразовать данные из TStringList в unsigned char? |
Философия, технологии, алгоритмы! |
|
Опции темы |
08.02.2012, 17:04 | #1 |
///
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43
Не в сети |
Как преобразовать данные из TStringList в unsigned char?
Господа, пишу в билдере.
Есть массив строк: TStringList *Dat = new TStringList; Dat->LoadFromFile("d:/hex.hex");//загрузка файла Есть функция отправки байта SendUART(unsigned char command) нужно чем-то обрастить строку SendUART(Dat->Strings[i].SubString(4,2)); чтобы передать 1 байт, HEX отображение которого и составляют два символа строки. НАпример Dat->Strings[i].SubString(4,2) = "23" (что означает 0x23), а подставить в SendUART надо "#" или 35, то есть unsigned char. Подскажите как. |
08.02.2012, 17:54 | #2 |
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
#include <stdlib.h>
long int strtol(const char *start, char **end, int radix); start - это строка, в end будет хранится первый адрес первого символа после сконвертированного значения, в radix передай 16 На выходе будет нужный байт. Так как функция будет пытаться преобразовать по максимуму, нужно будет каждые два символа записывать в отдельную строковую переменную. А вообще быстрее и проще это сделать вручную, через switch: long CharToIntVal(char a) { switch (a) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'A': return 10; case 'B': return 11; case 'C': return 12; case 'D': return 13; case 'E': return 14; case 'F': return 15; case 'a': return 10; case 'b': return 11; case 'c': return 12; case 'd': return 13; case 'e': return 14; case 'f': return 15; default: return -1; } } CharToIntVal(arr[0]*16) + CharToIntVal(arr[1]) CharToIntVal(arr[2]*16) + CharToIntVal(arr[3]) и т.д. |
08.02.2012, 19:18 | #4 |
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
|
08.02.2012, 20:16 | #7 | ||
///
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43
Не в сети |
Цитата:
Но помогите заставить работать это: Цитата:
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 *') Последний раз редактировалось -=Женек=-; 08.02.2012 в 20:33. |
||
08.02.2012, 21:45 | #9 | |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Цитата:
int n = strtol("A5", NULL, 16);//n=165, а n = strtol("A5B6", NULL, 16);//n=42422 с другой стороны: sscanf( "A5", "%2x", &n ); // n = 165 и sscanf( "A5B6", "%2x", &n ); // n = 165 |
|
08.02.2012, 21:55 | #10 | ||
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Цитата:
char c = sz[2]; sz[2] = 0; int n = strtol(sz, NULL, 16);//n=165, sz[2] = c; Так просто наверняка будет быстрее. |
||
08.02.2012, 22:05 | #11 |
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
|
08.02.2012, 22:48 | #12 | |||
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Цитата:
Цитата:
Цитата:
|
|||
08.02.2012, 22:59 | #13 | ||
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Цитата:
Есть вот замечательная функция CreateWindow, которая создает окно. Фокус состоит в том что ее на самом деле давно уже нет. Есть CreateWindowA и CreateWindowW и, в зависимости от настроек и / или define'ов подставляется либо та либо другая, когда пишешь CreateWindow. Здесь примерно такая же бодяга. |
||
08.02.2012, 23:25 | #14 | |||
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Цитата:
Цитата:
И далее, я открою вам страшную военную тайну: CreateWindow никогда не была функцией, да и функций CreateWindowA и CreateWindowW тоже давно уже нет: Цитата:
|
|||
08.02.2012, 23:44 | #16 | ||
Форумец
Сообщений: 40,100
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Цитата:
То что в ультрасовременных ОС подменили и вызов CreateWindow* на вызов CreateWindowEx* - вполне верю. В XP лично с отладчиком их (CreateWindow*) наблюдал в ядре. |
||
09.02.2012, 11:41 | #20 | |||||
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Цитата:
Цитата:
Цитата:
Цитата:
Одно непонятно, каким боком это все относится к вопросу ТС: Цитата:
Последний раз редактировалось aerin; 09.02.2012 в 14:59. |
|||||