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


Автор: KTatsu 28.11.2011, 02:59
Тут как бы 2 вопроса, но по моему, решение должно быть схоже.

Во первых, использую ReadProcessMemory. Вот так норм работает:
Код

ReadProcessMemory(la2proc,(LPVOID) 0x0FF6713C,&cp,8,NULL);

А так не хочет даже компилироваться:
Код

ReadProcessMemory(la2proc,(LPVOID) ("0x"+Edit1->Text),&cp,8,NULL);
В Edit текст типа 0FF6713C

Второе, это список клавиш в комбо боксе. Код клавиш F1-F12: 0x70-0x7B, грех не использовать это как-то так:
Код

unsigned short key;
key=IntToHex(ComboBox1->ItemIndex+112,2);
Вместо того, чтобы писать условие на каждую строку комбо бокса. Но тут мне компилятор тоже говорит, что я не прав.

Помогите, пожалуйста smile

Автор: Usper 28.11.2011, 07:44
С преобразованием типов проблема:
0x0FF6713C - число, а "0x"+Edit1->Text строка, причём лучше писать так: AnsiString("0x") + Edit1->Text, чтобы у компилятора меньше неоднозначностей возникало.
IntToHex() преобразует число в строку, а key - это арифметический тип.

Автор: artsb 28.11.2011, 08:06
Цитата(KTatsu @  28.11.2011,  02:59 Найти цитируемый пост)
А так не хочет даже компилироваться:

В чём причина вам уже сказал Usper. А сделать можно http://www.codeproject.com/KB/string/hexstrtoint.aspx

Автор: KTatsu 28.11.2011, 18:49
Цитата(artsb @  28.11.2011,  08:06 Найти цитируемый пост)
В чём причина вам уже сказал Usper.

Ну, причину я в общем-то из сообщений компилятора понял. А вот как выйти из ситуации не нашел.
Цитата(artsb @  28.11.2011,  08:06 Найти цитируемый пост)
А сделать можно так.

За ссылку спс... Правда я думал, что выход попроще должен быть.
Если так, то в моем случае будет проще организовать поиск адреса по значению и написать 12 строк в обработчике ComboBox'а.

За ссылку еще раз спс, принцип понятен.

Автор: Usper 29.11.2011, 07:45
Эээ... если всё понятно из сообщений компилятора, то в чём вообще проблема то? StrToInt() принимает и строки, в которых число записано в шестнадцатиричном виде.
Код

    int a;
    AnsiString S;
    S = "0xFF";
    a = StrToInt(S);
    ShowMessage(IntToStr(a));

Автор: KTatsu 29.11.2011, 09:47
Вы наверное не правильно поняли, или я не правильно объясннил. Дело в том, что мне нужен какраз арифметический тип, чтобы использовать в другой области программы:
Код

SendMessage(proc, WM_KEYUP, key, NULL);
smile

Автор: artsb 29.11.2011, 11:42
Цитата(KTatsu @  29.11.2011,  09:47 Найти цитируемый пост)
Вы наверное не правильно поняли

Почему же... Usper правильно говорит.

Из справки:
Цитата

StrToInt


Converts a string that represents an integer (decimal or hex notation) into a number. 

Так что, можно так:
Код

ReadProcessMemory(la2proc, (LPVOID) StrToInt(String("0x") + Edit1->Text), &cp, 8, NULL);

Автор: KTatsu 29.11.2011, 18:56
А, точно, все работает. Что-то я малость протупил...
Просто мне показалось, что я так уже пробовал:(

Для комбобокса написал так:
Код

key=StrToInt(String("0x")+IntToHex(ComboBox2->ItemIndex+112,2));
Все работает.

Ну, теперь точно все, вопрос решен. Спасибо огромное, ребята! smile

Я бы вам по плюсику поставил, но постов у меня слишком мало :(

Автор: artsb 29.11.2011, 20:17
Цитата(KTatsu @  29.11.2011,  18:56 Найти цитируемый пост)
key=StrToInt(String("0x")+IntToHex(ComboBox2->ItemIndex+112,2));

Эм... Это вы для теста так написали? А то какой-то замкнутый круг получился smile
Можно же просто:
Код

key=ComboBox2->ItemIndex+112;


Цитата(KTatsu @  29.11.2011,  18:56 Найти цитируемый пост)
Я бы вам по плюсику поставил, но постов у меня слишком мало :( 

Это поправимо  smile 

Автор: KTatsu 30.11.2011, 01:44
Цитата(artsb @  29.11.2011,  20:17 Найти цитируемый пост)
Можно же просто

Я сомневался в этой строке, потому написал тут...
Теперь мне окончательно стало ясно, на какой именно мелочи я запнулся и запутался smile
Я просто не знал, что, к примеру, между записями "key=0xFF" и "key=255" нет никакой разницы smile 

Хотя до того, как создавать тему я пробовал:
Код

ReadProcessMemory(la2proc,(LPVOID) StrToInt("0x"+Edit1->Text),&cp,8,NULL);
В таком варианте компилировалось, но значения были выданы не из того адреса, который я задавал.
Цитата(artsb @  29.11.2011,  20:17 Найти цитируемый пост)
Это поправимо

Ну... Как бы не хотелось бы всеже засорять форум бесполезными постами smile 

Ну ладненько, еще раз, спасибо smile 

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