Перекодировка в Unicode/Base64

Тема в разделе "WASM.NETWORKS", создана пользователем ganes, 17 дек 2004.

  1. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    У когонибудь есть примеры перекодировок в Base64 или Unicode? Если незатруднит выложите сырцы или ссылки на

    инфу здесь. На ВАСМе я уже смотрел и в-инете ниче ненашол путнего... Может есть какиенибудь API для упрощения этого

    темного дела. Желательно чтоб несильно громоздкие примеры,

    т.е какиенибудь лайт-варианты. Зараннее благодарю всех

    заинтересовшехся..
     
  2. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    Я вот в и-нете нашол вот-этот пример вроде позволяющий отправлять аттач со своего компа без всяких перекодировок,

    возможно ли это? А то чо-то ниччо невыходит ;-((((


    Код (Text):
    1.  
    2. [b]
    3.      Content-type: message/external-body; access-
    4.      type=local-file;
    5.           name="/u/nsb/Me.gif"
    6.      Content-type:  image/gif
    7.      Content-ID: <id42@guppylake.bellcore.com>
    8.      Content-Transfer-Encoding: binary
    9.      ТЕЛА НЕТ!
    10. [/b]
    11.  
     
  3. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    на C:
    Код (Text):
    1.  
    2. static void base64_t2q(BYTE *t, BYTE *q)
    3. {
    4.     BYTE alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    5.     q[0] = alpha[t[0] >> 2];
    6.     q[1] = alpha[((t[0] & 03) << 4) | (t[1] >> 4)];
    7.     q[2] = alpha[((t[1] & 017) << 2) | (t[2] >> 6)];
    8.     q[3] = alpha[t[2] & 077];
    9. }
    10.  
    11. static int msg_b64enc(char *outbuf, char *filename)
    12. {
    13.     HANDLE hIn;
    14.     BYTE inbuf[1024], t[3], q[3];
    15.     DWORD tp, inp, inlen, outp, i, linepos;
    16.     const DWORD linelen = 76;
    17.  
    18.     hIn = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, NULL);
    19.     if (hIn == INVALID_HANDLE_VALUE) return 1;
    20.  
    21.     for (tp=0, inp=0, inlen=0, outp=0, linepos=0;;) {
    22.         if (inp >= inlen) {
    23.             ReadFile(hIn, inbuf, sizeof(inbuf), &inlen, NULL);
    24.             if (inlen == 0) break;
    25.             inp = 0;
    26.         }
    27.         t[tp++] = inbuf[inp++];
    28.         if (tp == 3) {
    29.             base64_t2q(t, q);
    30.             for (i=0; i<4; i++) {
    31.                 outbuf[outp++] = q[i];
    32.                 if (++linepos >= linelen) {
    33.                     outbuf[outp++] = '\r';
    34.                     outbuf[outp++] = '\n';
    35.                     linepos = 0;
    36.                 }
    37.             }
    38.             memset(t, 0, sizeof(t));
    39.             tp = 0;
    40.         }
    41.     }
    42.  
    43.     if (tp) {
    44.         base64_t2q(t, q);
    45.         if (tp < 3) q[3] = '=';
    46.         if (tp < 2) q[2] = '=';
    47.         for (i=0; i<4; i++)
    48.             outbuf[outp++] = q[i];
    49.     }
    50.  
    51.     outbuf[outp] = 0;
    52.  
    53.     CloseHandle(hIn);
    54.     return 0;
    55. }




    got from MyDOOM
     
  4. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    ASM:


    Код (Text):
    1.  
    2. ;--------------------------------------------------------------------- --------
    3. ;base64 encoder without dictionary by RT Fishel
    4. ;--------------------------------------------------------------------- --------
    5.  
    6. b64_newline     proc    near
    7.         call    store_crlf
    8.  
    9. b64encode       label   near                    ;ebp = length, esi -> src buffer, edi -> dst buffer
    10.         push    (76 shr 2) + 1
    11.         pop     edx
    12.  
    13. b64_outer       label   near
    14.         dec     edx
    15.         je      b64_newline
    16.         lods    dword ptr [esi]
    17.         dec     esi
    18.         inc     ebp
    19.         bswap   eax
    20.         push    4
    21.         pop     ecx
    22.  
    23. b64_inner       label   near
    24.         rol     eax, 6
    25.         and     al, 3fh
    26.         cmp     al, 3eh
    27.         jb      b64_testchar
    28.         shl     al, 2                           ;'+' and '/' differ by only 1 bit
    29.         sub     al, ((3eh shl 2) + 'A' - '+') and 0ffh
    30.  
    31. b64_testchar    label   near
    32.         sub     al, 4
    33.         cmp     al, '0'
    34.         jnl     b64_store                       ;l not b because '/' is still < 0 here
    35.         add     al, 'A' + 4
    36.         cmp     al, 'Z'
    37.         jbe     b64_store
    38.         add     al, 'a' - 'Z' - 1
    39.  
    40. b64_store       label   near
    41.         stos    byte ptr [edi]
    42.         dec     ebp
    43.         loopne  b64_inner
    44.         jne     b64_outer
    45.         mov     al, '='
    46.         rep     stos byte ptr [edi]
    47.         ret
    48. b64_newline     endp
    49.  
    50.  
    51. store_crlf      proc    near
    52.         mov     ax, 0a0dh
    53.         stos    word ptr [edi]
    54.         ret
    55. store_crlf      endp
    56.  


    got from W32.JunkMail by roy g biv / RT Fishel
     
  5. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia


    Плохо искал, а особенно на WASM'е!!!

    Заходим на главную страницу, проматываем немного страницу вниз и останавливаемся на пункте "Последние исходники", смотрим на текст под №8 и видим: 8. BASE64.LIB [Quantum] ->
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    ganes

    А
    к base64

    никакого отношения не имеет.

    Это кодировка для текстов, позволяющая иметь

    более 256 символов.
     
  7. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Да и не понятно, что именно перекодировать в Unicode
     
  8. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    ASC2 в Unicode или в Base64, мне это надо для отсылки

    аттачей, а то покамись только текстовые мессаги шлю ;-(((

    Вот ищю легкие способы, а то вся эта перестановка битов

    сложно для меня, и хочеться откопать какиенибудь

    стандартные функции в Виндовзе для этого, скажем которые

    косственно относяться к этому делу, так что если кто знает

    или есть сирцы то поделитесь знаниями, заранне сенкс и

    респект всем!
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ganes

    Так уже kyprizel поделился знаниями и исходниками. Что ещё нужно?
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    ganes



    Когда составляешь вопрос не ленись

    посмотреть неизвестные слова :

    наверное uucode имелось ввиду :)
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105


    Сама Виндуз для этого использует от

    дедушки Юникса форматы, для которых уж

    лет 40 все пишут и пишут программы :)

    Функции эти зарыты скорее всего в

    DLL для Outlook Express - ищи там или

    в любой мыльной программе.

    Но я не понял : тебе шашечки или ехать надо ?!
     
  12. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    Мне-бы названия функцый, хотябы того-же ОутГлюка непомишалибы, или чонибудь что упрощает процесс перикодировки. Надо начинать с шашечек, а если собрать

    все вместе то можно и поехать :derisive:)) Так что есл. кто знает - делитесь...