内存- int变量字节

memcpy - int variable to BYTE

本文关键字:字节 变量 int 内存      更新时间:2023-10-16

我正在尝试使用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;
}

源样本已更新。现在生成ok

您的代码工作正常。在sizeof(int)==4的小端机器上,数字999将被存储为四个字节0xe7, 0x03, 0x00, 0x00。

您说您看到字符'ç':这是因为您试图将数组视为字符串,并且ç具有字符代码0xe7,这确实是写入的第一个字节。如果你把它看作一个数组(使用Visual Studio的内存视图,或者在观察窗口中输入pOutBuffer,12),你会看到正确的字节值。