【问题标题】:Convert char buffer to hex and write into a file (VC++)将字符缓冲区转换为十六进制并写入文件(VC++)
【发布时间】:2015-11-01 11:45:07
【问题描述】:

我有两个 DWORD。一个是指向我必须读取的内存部分的指针,另一个是消息长度。 我需要复制该“缓冲区”并将其保存到十六进制文件中。另外我必须保存其他数据。 到目前为止,我有:

    ofstream logFile;
logFile.open("log.txt");
int coutSend = 0;
int countRecv = 0;
void SavePacket(DWORD MemoryPointer, DWORD BufferLength, bool Direction)
{
    if (Direction == 0) {
        countSend++;
    }
    else
    {
        countRecv++;
    }

    time_t now = time(0);
    tm *ltm = localtime(&now);
    char * pMemory= reinterpret_cast<char*>(MemoryPointer);
    char * msg= new char[BufferLength];
    strcpy_s(msg, BufferLength, pMemory);
    logFile << ltm->tm_hour << ":" << ltm->tm_min << ":" << ltm->tm_sec << "," << Direction << "," << hex << msg << endl;
}

因此,如果我 logFile

【问题讨论】:

  • 使用for循环并分别打印每个字符

标签: c++


【解决方案1】:

除了以十六进制写入输出之外,您还存在严重的内存泄漏。您正在 malloc-ing 缓冲区,而不是 free-ing。

首先,您无用地将指针复制到分配的缓冲区中,没有任何明显的目的。您原来的pMemory 指针在写出输出的工作与msg 副本一样好。所以,第一步是摆脱分配msg和复制内存,没有用处,并以这种方式修复内存泄漏。

现在,就写入十六进制而言,使用 std::hexstd::setw(2) 操纵器,并使用循环一次一个字节地写出字符缓冲区。

while (bufferLength)
{
    logFile << std::hex << std::setw(2) << (int)(unsigned char)*pMemory;
    ++pMemory;
    --bufferLength;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2012-02-20
    • 2016-07-26
    • 2014-06-09
    • 2016-03-14
    • 2014-11-21
    • 2016-10-15
    相关资源
    最近更新 更多