gpt4 book ai didi

c++ - memcpy - BYTE 的 int 变量

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:13 26 4
gpt4 key购买 nike

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

源示例已更新。现在构建正常

最佳答案

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

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

关于c++ - memcpy - BYTE 的 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com