Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
#1

Char* не в той кодировке - C++

13.07.2014, 11:19. Просмотров 329. Ответов 13
Метки нет (Все метки)

Я читая память процесса игры и пытаюсь получить имя нужного мне обьекта, проблем найти нужный адрес труда не составило но в имени обьекта кирилица и вместо кирилици в char* nick я получаю кракозябры, проверял по байтово это те данные которые мне нужны но видимо нужно как-то изменить кодировку.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 11:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Char* не в той кодировке (C++):

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Различное поведение функции которая копирует строки с char* t и char t[] - C++
столкнулся с ситуацией которую не могу объяснить пишем функцию которая копирует одну строку в другую: void strstr(char* t,...

Ошибка: call of overloaded 'strchr(char&, char)' is ambiguous - C++
Здравствуйте, прога почему-то ругается на функцию strchr, вот кусок кода: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
13.07.2014, 11:30 #2
Чтобы работать со строкой, нужно знать, в какой она кодировке.
Нет этого знания - считайте, что и самой строки тоже нет.
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 11:41  [ТС] #3
Убежденный, ну я не знаю в какой кодировке текст но чит энейдж его читает без проблем...
0
Миниатюры
Char* не в той кодировке  
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,543
13.07.2014, 11:49 #4
попробуй другой строковый тип указать
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 14:40  [ТС] #5
Немного полазив получил вот такое, первые буквы нормально а дальше начинаеться ппц(
0
Миниатюры
Char* не в той кодировке  
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.07.2014, 15:26 #6
DELAKEY, а задать размер побольше не пробовали? Судя по всему 4 байта только читаете.
P.s. Возвращать указатель на локальный объект - ошибка. Он будет уничтожен при выходе из функции.
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 16:24  [ТС] #7
Да уже разобрался
Цитата Сообщение от Tulosba Посмотреть сообщение
P.s. Возвращать указатель на локальный объект - ошибка
вот тут я не понел я же вызываю функцию и она возвращает мне данные и вроде всё правельно, даже до формы данные доходят
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.07.2014, 16:37 #8
Цитата Сообщение от DELAKEY Посмотреть сообщение
даже до формы данные доходят
Просто удачное стечение обстоятельств. Следует или выделять память в куче (внутри функции) или же передавать в функцию указатель на память, куда будет записан результат.
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 18:25  [ТС] #9
Tulosba, можете поподробнее? похожу у меня в другом месте кода чтото вроде этого
есть метод
C++
1
2
3
4
5
6
7
char* Get::nick(){
    int basa = 0x10797390;
    int ofset_1 = 0x113f80;
    int ofset_2 = 0x0;
    char * nick = memory.ReadChars(memory.ReadInt(memory.ReadInt(basa) + ofset_1) + ofset_2);
    return nick;
}
по точкам останова в nick значение записываеться верное "ТупоСмерть" (это такой ник персонажа)
но там где я его вызываю
C++
1
2
3
4
5
Game->Select(pid);
             char* nick = Game->get.nick();
             System::String^  m = L"Главное окно";
             System::String^ str = gcnew System::String(nick);
             this->Text = m + L" - " + str;
в char* nick уже записываеться не понятные данные "€˜йoСмеранQ"
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.07.2014, 19:22 #10
DELAKEY, ReadChars надо модифицировать. Например так:
C++
1
2
3
4
5
char* Memory::ReadChars(DWORD adr, char* buf, size_t size)
{
    ReadProcessMemory( handle, (LPCVOID)(adr), buf, size, NULL );
    return buf;
}
Выделять буфер ДО вызова ReadChars, а удалять после использования результата, т.е. после
C++
1
gcnew System::String(nick);
А в связи с чем возникла необходимость использования CLR?
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 19:45  [ТС] #11
Цитата Сообщение от Tulosba Посмотреть сообщение
А в связи с чем возникла необходимость использования CLR?
интерфейс

а функции каторыми я получаю int значения не нужно модифицировать?
C++
1
2
3
4
5
int Memory::ReadInt(DWORD adr){
    int data = 0;
    ReadProcessMemory(handle, (LPCVOID)(adr), &data, 4, NULL);
    return data;
}
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.07.2014, 20:17 #12
DELAKEY, нет. Но вместо четверки я бы использовал sizeof(int) на всякий случай.
0
DELAKEY
6 / 6 / 0
Регистрация: 20.11.2013
Сообщений: 246
13.07.2014, 20:28  [ТС] #13
Tulosba, что-то всётаки у меня не так
C++
1
2
3
4
5
             char * nick = new char[32];
             Game->get.nick(nick);
             System::String^  m = L"Главное окно";
             System::String^ str = gcnew System::String(nick);
             this->Text = m + L" - " + str;
C++
1
2
3
4
5
6
7
8
char* Get::nick(char * buf_nick){
    int basa = 0x10797390;
    int ofset_1 = 0x113f80;
    int ofset_2 = 0x0;
    memory.ReadChars(memory.ReadInt(memory.ReadInt(basa) + ofset_1) + ofset_2, buf_nick, 32);
    char * t = buf_nick;
    return buf_nick;
}
C++
1
2
3
4
char* Memory::ReadChars(DWORD adr, char *buf, size_t size){
    ReadProcessMemory(handle, (LPCVOID)(adr), &buf, size, NULL);
    return buf;
}
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.07.2014, 20:50 #14
DELAKEY, копипастить надо уметь для buf не надо писать &
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 20:50
Привет! Вот еще темы с ответами:

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*) - C++
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

Ошибка в работе с файлами: error: incompatible types in assignment of ‘char*’ to ‘char* [255]’ - C++
Суть задания Есть файл допустим 1.txt нужно выполнить обработку этого файла а результат вывести в этот же файл с другим расширением ...

функция возвращает массив слов, содержащихся в текстовом сообщении char* Words(char *s) - C++
Стоит такая задача: функция должна возвратить массив слов, содержащихся в текстовом сообщении char* Words(char *s) Как это можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.07.2014, 20:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru