• XSS.stack #1 – первый литературный журнал от юзеров форума

C++ send UNICODE?

bnetmstr

HDD-drive
Пользователь
Регистрация
03.11.2020
Сообщения
32
Реакции
25
Privet, kto moshit pomo4 s otprawkaj UNICODA s send()

Funkzuja:

Код:
BOOL Send(SOCKET s,PCHAR lpData,int dwLen)
{
    if (dwLen == -1)
        dwLen=lstrlenA(lpData);

    return (send(s,lpData,dwLen,0) == dwLen);
}


char szBuf[1024];

Send(s, "Hi",  -1);
 
Пожалуйста, обратите внимание, что пользователь заблокирован
WideCharToMultiByte - переводишь твой юникод в анси.
Отправляешь.
На той стороне переводишь обартно в unicode - MultiByteToWideChar
 
WideCharToMultiByte - переводишь твой юникод в анси.
Отправляешь.
На той стороне переводишь обартно в unicode - MultiByteToWideChar
pomnu probiwal shtoto ne polu4alos, s wcstombs() toshe
 
Wot probiwal, ne rabotjet:

Код:
std::string wstrtostr(const std::wstring &wstr)
{
    // Convert a Unicode string to an ASCII string
    std::string strTo;
    char *szTo = new char[wstr.length() + 1];
    szTo[wstr.size()] = '\0';
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, szTo, (int)wstr.length(), NULL, NULL);
    strTo = szTo;
    delete[] szTo;
    return strTo;
}


int main()
{
    char ok[1024];

    memset(ok, 0, sizeof(ok));

    wsprintf(ok, "%s", wstrtostr(L"привет"));

    MessageBox(0, ok, 0, 0);

    return 0;
}

Zakinu client 4eres paru minut, nu dumaju tut wso ponatno, client hot kakoi moshit bit, gde funzija "send", nada unicode otprawit, w mojom slu4ije server luboj SMTP
 
У тебя lstrlenA считает длину строки в символах, а send ждет байты, в итоге отправляется лишь часть строки, потому что один символ это несколько байт.
Просто strlen попробуй.
 
Privet, kto moshit pomo4 s otprawkaj UNICODA s send()

Funkzuja:

Код:
BOOL Send(SOCKET s,PCHAR lpData,int dwLen)
{
    if (dwLen == -1)
        dwLen=lstrlenA(lpData);

    return (send(s,lpData,dwLen,0) == dwLen);
}


char szBuf[1024];

Send(s, "Hi",  -1);
юникот в байтовом представлении по сути тот-же ascii, ща пример покажу:
BYTE asciiVersion[] = { 't', 'e', 's', 't', 0 };
BYTE unicodeVersion = { 't', 0, 'e', 0, 's', 0, 't', 0, 0, 0 };

что-бы проверить это просто вызови:
MessageBoxA(0, (CHAR*)asciiVersion, 0, 0);
MessageBoxW(0, (WCHAR*)unicodeVersion, 0, 0);

исходя из этого что-бы отправить по сокету юникод тебе надо:
send(sock, unicodeVersion, sizeof(WCHAR) * (lstrlenW(unicoeVersion) + 1), 0);
 
Пожалуйста, обратите внимание, что пользователь заблокирован
юникот в байтовом представлении по сути тот-же ascii, ща пример покажу
Только для символов Latin1, любые локализованные символы нужно переводить, исходя из исходной и конечное кодировки.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх