将char缓冲区转换为十六进制并写入文件(VC ++)

时间:2015-11-01 11:45:07

标签: c++

我有两个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&lt;&lt; pMemory将整个消息写为ascii,但我需要将其写为十六进制。

1 个答案:

答案 0 :(得分:1)

除了以十六进制编写输出外,还有一个主要的内存泄漏。你正在制作一个缓冲区,你不会自由移动。

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

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

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