мусор в UNICODE

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by X-954377, 3 Jul 2010.

  1. X-954377

    X-954377 New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    1
    Reputations:
    0
    Всем привет у меня такая проблема с UNICODE вод код
    Code:
    #define UNICODE
    #define _UNICODE
    #include <Windows.h>
    #pragma comment(linker,"/Entry:WinMain")
     
    LPWSTR p(LPWSTR s)
    {
            const int len = lstrlen(s);
            wchar_t *tmp = (wchar_t*)s;
            wchar_t *key = new wchar_t[len]; 
            wchar_t *b   = new wchar_t[len];
     
            for(int i=0; i<len; i++)key[i]= key[i]+(wchar_t)77;
            for(int i=0; i<len; i++)b[i]= tmp[i]^key[i];
     
            return b;
    }
     
    int _stdcall WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
    {
            wchar_t *e = p(L"Hello");
            wchar_t *d = p(e);
     
            MessageBoxW(0,e,L"",0);
            MessageBoxW(0,d,L"",0);
     
            return 0;
    }
    
    Всё работает, но только выводит как в сообщение какой-то мусор, в чём моя проблема.

    За рание спасибо.
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    я не понимаю а что ты хочешь добиться этим??
    и в Си вообще то строки заканчиваются нулевым байтом...
     
    _________________________
  3. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    А что делает функция p??? )))

    Code:
    wchar_t *e = L"Hello";
    wchar_t *d = e;
     
  4. X-954377

    X-954377 New Member

    Joined:
    23 Jun 2010
    Messages:
    25
    Likes Received:
    1
    Reputations:
    0
    wchar_t *e = p(L"Hello"); ---- кодирует строку
    wchar_t *d = p(e); ----- обратно раскодирует

    всё теперь уже разобрался просто нужно было малентко функцию до ума довести!!!
    Code:
    
    LPWSTR WINAPI e_d_code(LPWSTR str)
    {
    	const int len =lstrlen(str);
    	wchar_t *key= new wchar_t[len];
    	wchar_t *buf= new wchar_t[len];
    	
    	lstrcpy(buf,str);
    	for(int i=0; i<len; i++)key[i]=key[i]+(wchar_t)0x77;
    	for(int i=0; i<len; i++)buf[i]=buf[i]^key[i];
    
    	return buf;
    }
    
    
    З.Ы. Думаю тема закрыто.