Кодировка UNICODE и ASCII

Тема в разделе "WASM.WIN32", создана пользователем Dima, 12 окт 2004.

  1. Dima

    Dima New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    3
    Помогите Пожалуйста из строки UNICODE получить ASCII, из ASCII в UNICODE есть макрос
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Dima

    WideCharToMultiByte?
     
  3. Dima

    Dima New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    3
    Спосибо за ответ q_q.

    Извени я не полностью раскрыл вопрос, на том этапе мне казалась проблема в кодировке, но время идет :). Собственно UNICODE возвращается после отработки NetQueryDisplayInformation в системный буфер, и тут начинаются кракозябли.Я эту функцию использую для просмотра сети, уровень устанавливаю 2, возвращается структура, .usri2_name не получается отобразить "нормально"



    Макрос:

    UNITOASCII MACRO STRINGADD1,STRINGADD2

    push edx

    push ecx

    mov ecx,STRINGADD1

    mov edx,STRINGADD2

    @@:

    mov ax,WORD PTR [ecx]

    mov [edx],al

    add edx,1

    add ecx,2



    cmp ax,0

    jne @b



    pop ecx

    pop edx

    ENDM



    Вызов из секции кода: UNITOASCII offset UnicodeString,offset Buffer
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Dima

    Расшифруй термин отобразить. На экране?



    Твоего кода не достаточно, т.к. не видно описания/определния UnicodeString и Buffer.



    Ты уверен, что NetQueryDisplayInformation отрабатывает успешно?



    Imho макрос - "нехороший", я использую
    Код (Text):
    1. WideCharToChar
    2.     mov   eax,[esp+04h] ;; адрес UNICODE-строки
    3.     push  eax
    4.     push  -1
    5.     push  eax
    6.     call  IsBadStringPtrW
    7.     or    eax,eax
    8.     pop   eax
    9.     jnz   short @1
    10.     push  eax
    11.     call  lstrlenW
    12.     inc   eax
    13.     jz    short @2
    14.     push  eax
    15.     push  eax
    16.     push  40h       ;; GMEM_FIXED or GMEM_ZEROINIT
    17.     call  GlobalAlloc
    18.     pop   ecx
    19.     or    eax,eax
    20.     jz    short @2
    21.     mov   edx,[esp+04h]
    22.     push  eax
    23.     push  0
    24.     push  0
    25.     push  ecx
    26.     push  eax
    27.     push  -1
    28.     push  edx
    29.     push  0
    30.     push  CP_ACP
    31.     call  WideCharToMultiByte
    32.     or    eax,eax
    33.     pop   eax
    34.     jnz   short @2
    35.     push  eax
    36.     call  GlobalFree
    37. @1: xor   eax,eax
    38. @2: ret   4
    39. WideCharToChar endp
     
  5. Dima

    Dima New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    3
    Согласен, твой код лучше.

    NetQueryDisplayInformation отрабатывает правильно т.к. получаю ошибку ERROR_MORE_DATA и дальше у меня проблемы с пониманием извлечения структуры NET_DISPLAY_...,в программе на С это очень просто(пример в MSDN-> NetQueryDisplayInformation тоько он карявый, рабочий есть по NetServerEnum)в обоих случаях они объявляют 2структуры NET_DISPLAY_GROUP(SERVER_INFO_101) и копируют адрес(?) полученный в другую структуру, это получается, не получается вывести на дисплэй имена компьютеров(или вообще к ним добраться выводит что-то типа ??";№ - чёрти что)
     
  6. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    А что мешает читать в буфер вимволы через один? 1,3,5...,n пока не встретишь нулевое слово, т.е. два байта нулей...

    ...

    ...

    Или вообще для "отображения" использовать UNICODE функции?
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Или вообще для "отображения" использовать UNICODE функции?



    Ага, особенно в 9x =)
     
  8. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    > Ага, особенно в 9x =)

    А что в 9х нет функции MessageBoxU или SetWindowTextU?
     
  9. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > или SetWindowTextU?



    Этой точно нет.

    А юникодовая MessageBox в 9х сводится к ASCII варианту после преобразования строк.
     
  10. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Зато в 9х есть TextOutW.
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Dima

    не получается вывести на дисплэй

    Если что-то не получается, то покажи код.



    Про вывод для GUI-app написали. В аттаче смотри про вывод для CON-app.



    [​IMG] _444456153__demoNQDIA.rar