Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› ASCII значение в OllyDbg это ANSI? И как сделать из нее Unicode
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2013 14:10
· Личное сообщение · #1

Я отлаживаю программу,некорректно выводящую текстовую информацию. Проблемная строка в OllyDbg отображается как ASCII, а то что выводится корректно - Unicode.
ASCII это и есть обычный Multibyte Char или нет?



Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 02 августа 2013 14:38 · Поправил: dant3
· Личное сообщение · #2

в ASCII под символ отводится байт, в Multibyte Char по названию должно быть понятно, что полюбасу не один, а теперь вопрос: как вы думаете это одно и тоже или нет?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 02 августа 2013 14:52
· Личное сообщение · #3

dant3 пишет:
Multibyte Char по названию должно быть понятно, что полюбасу не один

Не полюбасу, он может быть от одного и более.

-----
Лучше быть одиноким, но свободным © $me




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2013 15:06
· Личное сообщение · #4

Тип переменной: DhcpServer: IP_ADDR_STRING ,не получается преобразовать её в текстовый формат.
Вот такой код не работает:
Code:
  1. TmpPointer: PIP_ADAPTER_INFO;
  2. IP_ADDRESS_STRING = record
  3.     S: array [0..15] of Char;
  4.   end;
  5. IpAddress: IP_ADDRESS_STRING;
  6. ShowMessage(TmpPointer^.DhcpServer.IpAddress.s)




Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 02 августа 2013 15:40
· Личное сообщение · #5

BoRoV пишет:
Не полюбасу, он может быть от одного и более.

Надо полагать в данном случае больше одного ;)



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 02 августа 2013 16:56 · Поправил: HiEndsoft
· Личное сообщение · #6

Multibyte Char = Многобайтная кодировка = ASCII = Строка char, оканчивающаяся нулём.
Wide char = Unicode ...
В ольке по правой кнопке мыши есть в менюшке переключение ASCII<->UNICODE.

-----
продавец резиновых утёнков




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2013 16:59
· Личное сообщение · #7

Ну а какую функцию надо в Делфях применить,чтобы эта строка в дебаггере стала отображаться как Unicode? MultibyteToWideChar? Я делал StringToWideChar - ноль эффекта



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 02 августа 2013 17:00
· Личное сообщение · #8

Да API MultibyteToWideChar.

-----
продавец резиновых утёнков





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 02 августа 2013 22:24 · Поправил: DenCoder
· Личное сообщение · #9

HEXMature
--> Была же тема<--. Искать надо лучше. Тебе оттуда нужен первый пример, только CP_ACP вместо CP_UTF8

Code:
  1. int wlen = MultiByteToWideChar(CP_ACP, 0, sAscii, -1, NULL, 0);
  2. wchar_t* wtmp = new wchar_t[wlen];
  3. MultiByteToWideChar(CP_ACP, 0, sAscii, -1, wtmp, wlen);


-----
IZ.RU




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2013 10:37
· Личное сообщение · #10

Не пашет,в дебаггере видно что входное значение берет не из той ячейки (сдвинуто на 2 влево):
Code:
  1.  gatewide:PWideChar;
  2.     MultibyteToWideChar(CP_ACP,0,@TmpPointer^.GatewayList.IpAddress,MAX_PATH,&gatewide,0);
  3.      ShowMessage('Шлюз: '+gatewide);




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2013 11:07
· Личное сообщение · #11

Вот картинка из отладчика:


Не понимаю,какого хрена ничего не получается. Выводит либо квадратики,либо пустую строку



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 05 августа 2013 11:08
· Личное сообщение · #12

Функция StringToWideChar( const Source: string; Dest: PWideChar; DestSize: Integer ): PWideChar;

Модуль: System

Описание
Функция преобразовывает строку Source формата ANSI в Unicode-строку.
Параметр Dest указывает на буфер, в который будет помещена результирующая строка.
DestSize - размер буфера.
Функция помещает в буфер DestSize-1 символ и символ окончания строки. В качестве результата функция возвращает указатель на буфер Dest.

******

Функция WideCharToString( Source: PWideChar ): string;

Модуль: System

Описание
Функция преобразовывает Unicode строку в ANSI-формат. Для преобразования строк данная функция использует вызов функции WideCharToMultiByte Win32 API. Результирующая строка может содержать как одиночные, так и многобайтовые символы.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 05 августа 2013 11:20 · Поправил: ClockMan
· Личное сообщение · #13

Попробуй в ольке поставить галочки здесь
Debbugin options>strings>Allow Diacritical symbols.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2013 12:26 · Поправил: HEXMature
· Личное сообщение · #14

Vovan666
Так тоже не работает:
Code:
  1. StringToWideChar(TmpPointer^.GatewayList.IpAddress.s,gatewide,MAX_PATH);

И @gatewide, и &gatewide пробовал - выводит пустую строку.

В аттаче короче исходник (оригинал), там под 7-ю версию компилировалось нормально.

d415_05.08.2013_EXELAB.rU.tgz - Unit1.pas




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 августа 2013 13:17
· Личное сообщение · #15

И при чём здесь этот форум, если не в состоянии вызвать 1-2 апи?


 eXeL@B —› Вопросы новичков —› ASCII значение в OllyDbg это ANSI? И как сделать из нее Unicode
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати