如何在* 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
答案 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)
使用memcpy
将int
的字节复制到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;
}