Unicode

Тема в разделе "WASM.WIN32", создана пользователем AntiB, 14 сен 2008.

  1. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Доброе время суток!
    У меня есть массив 04 01 00 63 04 5E
    как мне с етого массива Unicode получить AnsiString ?
    Зарание благодарен
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Кажется вот так:
    Код (Text):
    1.        mov edi,offset AnsiBuffer
    2.        mov esi,offset Massiv
    3.        mov ecx,MassivSize
    4. @@:
    5.        mov al,[esi]
    6.        mov byte ptr [edi],al
    7.        add esi,2
    8.        inc edi
    9.        dec ecx
    10.        dec ecx
    11.        jnz @B
    12.        mov byte ptr [edi],0
     
  3. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Ну што за фигня.
    Для этого есть функция WideCharToMultiByte()
    А все остальное - от лукавого :)
     
  4. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Flasher
    твой алгос можно упростить до

    Код (Text):
    1.        
    2.        mov edi,offset AnsiBuffer
    3.        mov esi,offset Massiv
    4.        mov ecx,MassivSize
    5. @@:
    6.        inc esi
    7.        movsb
    8.        sub ecx, 2
    9.        jnz @B
    10.        mov byte ptr [edi],0
    Но он будет верным только для символов из стандартной латиницы (a-z; A-Z; 0-9)
    Для всех остальных кодировок - НЕТ.

    Используй WideCharToMultiByte(), как уже советовали выше.
    Самый правильный вариант.
     
  5. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Всем спасибо!
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Иногда удобнее конвертить unicod туда обратно через wsprintf(A/W) с ключём %W, хотя скорее всего она вызывает те же WideCharToMultiByte\MultiByteToWideChar с текущей кодовой страницей.