我的自动更新程序有问题
它应该从网站下载并保存更新,但问题是(而且我确信这种情况经常发生,但我无法在谷歌上找到可以让我得到答案的关键字)它保存了 .它收到的 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
如您所见,它将代码字节写入 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();
有人知道怎么做吗,我试过使用谷歌,但我无法提出一个能给我正确结果的问题
最佳答案
确保以二进制模式打开输出文件:
std::ofstream put("Eprog.exe", ios::binary | ios::hex );
关于C++自动更新程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109983/