将值存储在指针var中

时间:2015-06-30 04:29:18

标签: c++

如何在* pData中存储int值并显示它的值?

  int id = 12;
  int age = 14;
  unsigned char* pData = new unsigned char[8];
  memcpy(pData,&id,4);/* using memcpy to copy */
  pData = pData + 4;
  memcpy(pData,&age,4);/* using memcpy to copy */
  // How to print value from buffer *pData

5 个答案:

答案 0 :(得分:2)

你可以将pData改为int *,然后就可以打印int valve。

cout<<*((int *)pData);

答案 1 :(得分:2)

memcpy(pData,&id,4);

此行将id中的四个字节数据复制为pData,但是您将其声明为char *。 如果你将它声明为int * pData = new int [2];然后你就可以确定准确的值了。

 using namespace std;
 int id = 12;
 int age = 14;
 unsigned int* pData = new unsigned int[2];
 memcpy(pData,&id,4);
 pData = pData + 1;
 memcpy(pData,&age,4);
 pData = pData - 1;
 cout<<"ID:"<<pData[0]<<"\nAge:"<<pData[1]<<endl;

这将打印值。

答案 2 :(得分:2)

使用memcpyint的字节复制到unsigned char缓冲区后,显示整数的唯一正确方法是将字节复制回int。例如:

int temp_int;
memcpy(&temp_int, pData, sizeof temp_int);
std::cout << temp_int << '\n';
memcpy(&temp_int, pData + sizeof temp_int, sizeof temp_int);
std::cout << temp_int << '\n';

尝试将缓冲区重新解释为int会因违反严格别名规则而导致未定义的行为。

答案 3 :(得分:1)

您可以使用reinterpret_cast运算符打印pData:

Result result=new Result();
result.Professions.ToObservableCollection();

答案 4 :(得分:1)

如果您确实需要将内存分配为unsigned char*,则可以执行以下操作:

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    int id = 12;
    int age = 14;

    // const pointer to buffer which can contain 2 ints
    unsigned char* const pData = new unsigned char[2*sizeof(int)];

    // non-const pointer to operate on data
    unsigned char* pDataPtr = pData;

    memcpy(pDataPtr,&id,sizeof(int));
    pDataPtr += sizeof(int);
    memcpy(pDataPtr,&age,sizeof(int));

    std::cout<<*reinterpret_cast<int*>(pData)<<std::endl;
    std::cout<<*reinterpret_cast<int*>(pData + sizeof(int))<<std::endl;

    delete [] pData;

    return 0;
}