VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3976|回复: 3

关于int,const char* 拷贝问题

[复制链接]
32_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-22 14:43:09 | 显示全部楼层 |阅读模式
10驿站币
最近在弄自定义格式存储, 假设我自定义了一个内存空间: const char* byte = new char[20],  int  number = 4,  const char* mes = "hello, world",  使用memcpy方法,我怎么让byte前面四个字节存储int值, 第4到第8字节存储mes的值, 我现在做法把这些数据全部转成const char* 类型, 然后采用memcpy方式进行拷贝, 这种方式肯定不是很合理,  请问我该怎么处理?





上一篇:为啥我的程序开机启动时,都会出错?
下一篇:如何正确的返回字符串指针?
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-7-22 15:15:26 | 显示全部楼层
memcpy(byte, &number, sizeof(number));
memcpy(byte + sizeof(number), mes, sizeof(char) * strlen(mes) + 1);
32_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-7-22 15:50:55 | 显示全部楼层
本帖最后由 496643881 于 2019-7-22 16:33 编辑
Debug 发表于 2019-7-22 15:15
memcpy(byte, &number, sizeof(number));
memcpy(byte + sizeof(number), mes, sizeof(char) * strlen(mes ...


这个int值解析 的时候好像不对
20_avatar_middle
最佳答案
0 
online_vip 发表于 2019-8-3 23:14:42 | 显示全部楼层
  1. const char* byte = new char[20];
  2. size_t byte_index = 0; // 记录byte的偏移位置

  3. int  number = 4,  const char* mes = "hello, world";

  4. // 拷贝number到byte并记录新的偏移量
  5. memcpy(byte + byte_index, &number, sizeof(number));
  6. byte_index += sizeof(number);

  7. /*
  8. * 拷贝mes到byte
  9. * 需要注意的是byte长度为20,number储存使用了4字节,因此mes的长度最大不能超过20-4
  10. * 这里拷贝的mes不包含\0,所以解析的时候长度是未知的,因此存在缺陷,建议先保存mes的长度
  11. * 比如这样
  12. *
  13. * size_t mes_len = strlen(mes);
  14. * if (mes_len > 255 || mes_len > 20 - 4 - 1) {
  15. *    // 只使用一个字节保存长度,unsigned char最大只能记录为255
  16. *    // 又因为byte为20字节,减去number占用4个字节,以及记录mes长度的一个字节
  17. *    // 这里要判断是否有足够的内存保存mes
  18. *    assert(0);
  19. * }
  20. *
  21. * *reinterpret_cast<unsigned char *>(byte) = mes_len;
  22. * byte_index += 1;
  23. *
  24. * memcpy(byte + byte_index, mes, mes_len);
  25. * byte_index += mes_len;
  26. */

  27. memcpy(byte + byte_index, mes, strlen(mes));
  28. byte_index += strlen(mes);
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-26 08:50

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表