memcpy - int变量到BYTE

时间:2011-04-26 23:34:15

标签: c++ c visual-studio visual-c++ memcpy

我正在尝试使用memcpy创建数据包。我希望看到pOutBuffer中的输出,其前四个字节将有999,接着是111后跟12;但目前我得到了一些垃圾。

问题是,我认为不是复制值,而是复制地址。如何将这些值复制到连续的内存中,以便我可以将其写入磁盘并可以使用我定义的格式在接收端检索数据?

感谢。

#include "stdafx.h"
#include "windows.h"
typedef struct
{
    int Begin;
    int End;
    int Size;
}PACKET;


void AddBuffer(PACKET* pPacket, BYTE* pOutBuffer)
{
    memcpy(pOutBuffer, &pPacket->Begin, sizeof(int));
    memcpy(pOutBuffer+sizeof(int), &pPacket->End, sizeof(int));
    memcpy(pOutBuffer+sizeof(int)+sizeof(int), &pPacket->Size, sizeof(int));
}

int _tmain(int argc, _TCHAR* argv[])
{
    PACKET* pPacket = new PACKET;
    pPacket->Begin = 999;
    pPacket->End   = 111;
    pPacket->Size  = 12;

    BYTE* pOutBuffer = new BYTE [pPacket->Size];
    AddBuffer(pPacket, pOutBuffer);

    //Write pOutBuffer on to the disk 
    //WriteFile(vhFileToWrite,(BYTE*)pOutBuffer,pPacket.Size,&vRetFileSize,NULL);

    //Delete pOutBuffer
    return 0;
}

源样本已更新。它现在构建好了

1 个答案:

答案 0 :(得分:3)

您的代码正常运行。在sizeof(int)== 4的little-endian机器上,数字999将存储为四个字节0​​xe7,0x03,0x00,0x00。

你说你看到了字符'ç':那是因为你试图将数组视为字符串,而ç的字符代码为0xe7,这确实是写的第一个字节。如果您将其视为一个数组(使用Visual Studio的内存视图,或在监视窗口中键入pOutBuffer,12),您将看到正确的字节值。