Unicode

Discussion in 'WASM.WIN32' started by AntiB, Sep 14, 2008.

  1. AntiB

    AntiB New Member

    Blog Posts:
    0
    Joined:
    Mar 23, 2007
    Messages:
    393
    Доброе время суток!
    У меня есть массив 04 01 00 63 04 5E
    как мне с етого массива Unicode получить AnsiString ?
    Зарание благодарен
     
  2. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Кажется вот так:
    Code (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

    Blog Posts:
    0
    Joined:
    Mar 15, 2006
    Messages:
    238
    Location:
    Russia
    Ну што за фигня.
    Для этого есть функция WideCharToMultiByte()
    А все остальное - от лукавого :)
     
  4. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    Flasher
    твой алгос можно упростить до

    Code (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

    Blog Posts:
    0
    Joined:
    Mar 23, 2007
    Messages:
    393
    Всем спасибо!
     
  6. Y_Mur

    Y_Mur Active Member

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