#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std; struct Person
{
int age;
int id;
}; template <class T> T myRead(void * memory)
{
char buffer[sizeof(T)];
memcpy(buffer, memory, sizeof(T));
T temp = *((T *)buffer); // 调用 Person 拷贝构造
return temp;
} template <class T> T myRead2(void * memory)
{
T temp;
memcpy(&temp, memory, sizeof(T));
return temp;
} template <class T> T* myRead3(void * memory, int offset)
{
T* temp = new T;
memcpy(temp, (char*)memory+offset, sizeof(T));
return temp; //返回指针, 有内存泄漏风险
} template <class T> void myRead4(void * memory, int offset, T* data)
{
memcpy(data, (char*)memory+offset, sizeof(T));
} template <class T> T* myRead5(void * memory, int offset)
{
T* t = (T*)((char*)memory+offset);
return t;
} int main()
{
char bytes[] = "\x05\x00\x00\x00\x0A\x00\x00\x00\x06\x00\x00\x00\x0C\x00\x00\x00";
Person p = myRead<Person>(bytes); // 调用 Person 拷贝构造
printf("age = %d, id = %d\n", p.age, p.id); Person p2 = myRead2<Person>(bytes); // 调用 Person 拷贝构造
printf("age = %d, id = %d\n", p2.age, p2.id); Person* p3 = myRead3<Person>(bytes, );
printf("age = %d, id = %d\n", p3->age, p3->id); Person* p4 = new Person;
myRead4<Person>(bytes, , p4);
printf("age = %d, id = %d\n", p4->age, p4->id); //这个会崩溃
//Person* p5 = NULL;
//myRead4<Person>(bytes, 7, p5);
//printf("age = %d, id = %d\n", p5->age, p5->id); Person* p6 = myRead5<Person>(bytes, );
printf("age = %d, id = %d\n", p6->age, p6->id); cin.get();
return ;
}

执行结果

 age = , id =
age = , id =
age = , id =
age = , id =
//程序崩溃
age = , id =

最新文章

  1. mtd零星记录
  2. Apache性能优化、超时设置,linux 重启apache
  3. mime类型表
  4. Dialog第三方登录等待
  5. 机器学习之AdaBoost
  6. Java基础学习中一些词语和语句的使用
  7. jquery精简选项卡
  8. jQuery 怎么实现文字显示2s,消失0.5s,再显示2s,再消失0.5s,以此循环
  9. 201521123104《Java程序设计》第1周学习总结
  10. 201521123027 &lt;java程序设计&gt;第11周学习总结
  11. OpenCV 实现颜色直方图
  12. Android相关面试题---面试官常问问题
  13. 写入Log错误日志
  14. pytorch使用总结
  15. CentOS7的内核优化
  16. 【Java集合系列一】ArrayList解析
  17. struts2 default.xml详解
  18. Android开发代码规范总结
  19. Unity系列文章
  20. Python获取二维数组的行列数

热门文章

  1. Java全系列帮助文档下载
  2. URL传递中文:Server.UrlEncode与Server.UrlDecode
  3. Flink Flow
  4. (MVVM) ListBox Binding 和 实时刷新
  5. visual studio code断点调试react
  6. ST&#160;Link&#160;调试问题总结
  7. 关于cn.jedisoft.framework.annotations 的增删改查
  8. C#MD5笔记
  9. layui 设计资源——2.0 版本的 Axure 组件包,产品交互设计利器
  10. Tomcat启动阻塞变慢