内存- int变量字节
memcpy - int variable to BYTE
我正在尝试使用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
),你会看到正确的字节值。
相关文章:
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 函数获取参数的变量列表并将它们转换为一系列字节?
- 如何编辑变量内的半字节?
- 我可以在没有临时变量的情况下将单字节写入文件吗?
- 为什么分配的变量地址之间相差 16 个字节?
- 如何将变量二进制数据(作为字符串)转换为字节数组
- 从变量中提取八位字节int64_t
- 变量的字节表示的意外结果
- 如何从无符号变量写入和读取字节
- Qpid处理字节数组c++的变量类型
- 字节数组到变量
- 为什么在visual studio中连续的int数据类型变量位于12个字节的偏移
- 读/写void*变量的单个字节
- 为什么128位变量应该对齐到16字节边界
- 是否可以在c/c++中的double(8字节)类型的变量中存储8个字符(每个1字节)
- 如果我对浮点变量使用malloc和calloc,并将其赋值为int,那么剩下的2个字节会发生什么呢?
- 从java中的多字节变量中获取单个字节
- 模板来确定以字节为单位的各种变量的大小
- 如何使用C语言将整数值转换为其相应的十六进制并将其存储在单字节变量中