Winsock. Проблема передачи значания переменной DWORD
send(Sock,(char*)&dwSizeFile,4,0);//отправляем размер файла
А клиент получает эти данные вот так:
recv(Sock,sSizeFile,4,0);
DWORD dwSizeFile=(DWORD)*sSizeFile;
И если размер файла равен 5, то все работает нормально, клиент получает число dwSizeFile=5. А вот если передается число 45056, то клиент получает dwSizeFile=0, а если смотреть по-байтово переменную sSizeFile, то получаем:
dwSizeFile[1]=-80'°'
dwSizeFile[2]=0
dwSizeFile[3]=0
Может я что-то делаю не правильно?
передача:
DWORD dwValueTr = 45056;
Value[0] = dwValueTr & 0xff;
Value[1] = dwValueTr >> 8 & 0xff;
Value[2] = dwValueTr >> 16 & 0xff;
Value[3] = dwValueTr >> 24 & 0xff;
send(Sock, (char*)Value, 4, 0);
прием:
recv(Sock, (char*)Value, 4, 0);
DWORD dwValueRc = Value[3] << 24 | Value[2] << 16 | Value[1] << 8 | Value[0];
Это побитовый сдвиг вправо и влево. ШпиЁн видно не любит макросы типа LOWORD и т.п.
А с указателями вы хитро работаете. Только в конце какие-то глюки
DWORD dwSizeFile=(DWORD)*sSizeFile;
тут берётся char по указателю sSizeFile и приводится к типу DWORD. Конечно после этого старшие байты теряются. Не силен в указателях, но тут наверно надо что-то типа
DWORD dwSizeFile=(DWORD)*(DWORD *)sSizeFile;
А если не сработает, то тут надо смотреть в данные с указателями sSizeFile, sSizeFile+1, sSizeFile+2, sSizeFile+3 и извращаться с ними как в примере Шпиёна.
recv(Sock,(char*)dwSizeFile,4,0);
//DWORD dwSizeFile=(DWORD)*sSizeFile;
Рекомендую откопать какой-нибудь учебник по Си и почитать про указатели и типы переменных. Тогда может разберётесь, что указатель на переменную в 1 байт не то же самое, что указатель на переменную в 4 байта.
До этого ничего объяснить невозможно.