分享

C语言中结构体与字符数组之间的相互转换

 XeonGate 2019-12-16
https://blog.csdn.net/qq_31094099/article/details/80790346

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #pragma  pack(push)  //保存对齐状态  
  5. #pragma  pack(1)  
  6. typedef struct strcChange
  7. {
  8. unsigned char A;
  9. unsigned int B;
  10. }STRU_CHANGE;
  11. #pragma  pack(pop)  
  12. //如果在未加字节对齐的情况下,那么A变量的后面需要自动填充三个字节,
  13. //那么直接将结构体取地址后复制到另一个数组中,实际上所需占用的内存大小是8个byte。
  14. typedef struct strcChange2
  15. {
  16. unsigned char A;
  17. unsigned char B;
  18. unsigned char C;
  19. }STRU_CHANGE2;
  20. int main()
  21. {
  22. STRU_CHANGE strChangeData1;
  23. STRU_CHANGE strChangeData2;
  24. STRU_CHANGE * pstrChangeData1;
  25. unsigned char * pucData;
  26. char C[10];
  27. strChangeData1.A = 0x01;
  28. strChangeData1.B = 0x05040302;
  29. strChangeData2.A = 0x11;
  30. strChangeData2.B = 0x55443322;
  31. pucData = (unsigned char *)(&strChangeData2);
  32. printf("pucData[0] = 0x%x\n", pucData[0]);
  33. printf("pucData[1] = 0x%x\n", pucData[1]);
  34. printf("pucData[2] = 0x%x\n", pucData[2]);
  35. printf("pucData[3] = 0x%x\n", pucData[3]);
  36. printf("pucData[4] = 0x%x\n", pucData[4]);
  37. memcpy(C, &strChangeData1, sizeof(strChangeData1));
  38. pstrChangeData1 = (STRU_CHANGE *)((char*)C);
  39. printf("STRU_CHANGE.A = 0x%x\n", pstrChangeData1->A);
  40. printf("STRU_CHANGE.B = 0x%08x\n", pstrChangeData1->B);
  41. system("PAUSE");
  42. return 0;
  43. }

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多