簡體   English   中英

memcpy-字節的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;
}

源樣本已更新。 現在可以了

您的代碼正常工作。 在sizeof(int)== 4的小端計算機上,數字999將存儲為四個字節0​​xe7、0x03、0x00、0x00。

您說您看到了字符'ç':這是因為您試圖將數組視為字符串,並且ç具有字符代碼0xe7,這實際上是寫入的第一個字節。 如果將其視為數組(使用Visual Studio的內存視圖或在監視窗口中鍵入pOutBuffer,12 ),則將看到正確的字節值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM