C++自动更新程序

标签 c++ automation hex ofstream

我的自动更新程序有问题

它应该从网站下载并保存更新,但问题是(而且我确信这种情况经常发生,但我无法在谷歌上找到可以让我得到答案的关键字)它保存了 .它收到的 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/

相关文章:

将 int 转换为十六进制格式的字符串

c - 使用十六进制字符作为 c 程序的输入会改变字符?

c++ - 反距离加权插值

C++ lambda : Access static method in lambda leads to error 'this was not captured for this lambda function'

c++ - 在 Qt View 中使用 QWidget

c++ - 如何在单例模式中初始化类成员?

testing - JMeter : How to click on a particular element ?

java - 是否有一个选项可以像我们测试 Web 应用程序一样从外部测试 Java 应用程序?

testing - Testcafe - 在单个声明中对所有测试调用 RequestHook?

java - java中的Apache通用编解码器从字符串到十六进制,反之亦然