У меня возникли проблемы с программой автоматического обновления моегоC++ Авто обновление программы
Он должен загрузить & сохранить обновления с веб-сайта, но проблема (и я уверен, что это происходит много но я не мог рассказать о ключевых словах, которые могли бы получить ответ на Google), это сохраняет данные .exe, которые он получает, а не так, как предполагалось. Это экономит байты в ACSI ... позвольте мне показать, что:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ ÿÿ
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ¸ @
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030 00 00 00 00 00 00 00 00 00 00 00 00 B0 00 00 00 °
Эти данные, (что является правильным данных) Похоже, это в новой программе:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 0D 0A 34 44 35 41 39 30 30 30 30 33 30 30 30 30 4D5A9000030000
00000010 30 30 30 34 30 30 30 30 30 30 46 46 46 46 30 30 0004000000FFFF00
00000020 30 30 42 38 30 30 30 30 30 30 30 30 30 30 30 30 00B8000000000000
00000030 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 0040000000000000
Как вы можете видеть он записывает codebytes как значения ASCii ... Это код, я использую
Приемная часть:
char szRecvBuff[10000] = "" ;
string szRecvHolder = "" ;
int iLastCharacter = 0;
recv(Socket, szRecvBuff, sizeof(szRecvBuff), 0);
szRecvHolder = szRecvBuff;
iLastCharacter = szRecvHolder.find_last_of("\n");
if(iLastCharacter < szRecvHolder.size() && iLastCharacter > 0){
szRecvHolder.erase(iLastCharacter);
}
return szRecvHolder;
}
...
...
{
...
...
Recv();
string Edat = Recv();
std::ofstream put("Eprog.exe", ios::hex);
put << Edat.c_str();
put.close();
Кто-нибудь знает, как это сделать, я попытался использовать Google, но я не мог сформулировать вопрос, который бы дал мне правильные результаты.
Я ошибаюсь или ios :: hex - это растровое изображение, оператор - std :: hex? –
Возможно, он хочет ios :: binary, а не ios :: hex. Но это не единственная проблема. –