关于memcpy涉及到的计算机大小端的问题思考总结

本文探讨了在C++和C语言中,如何使用memcpy处理short类型的X和Y坐标存储到unsigned int变量中时遇到的大端小端问题。通过分析memcpy的工作原理和内存布局,解释了为何最初的直觉可能误导,并详细阐述了解决此类问题的关键点。
摘要由CSDN通过智能技术生成

【背景】

我今天在打公司的项目一个临时版本时,看到代码中有一段是关于使用无符号整型类型的空间存储 X 和 Y 坐标时踩了个坑;

当时觉得之前写这个的同事写反了,但是后来通过将两个坐标memcpy() 处理后的 unsigned int 类型数字以十六进制打印后发现,原来自己同事没有写反,那就纠结了,瞬间想到以前好像在书上看过类似问题是大小端引起的,经过网上查文章和敲代码思考过后,决定晚上回来写下今天的思路历程和结果。话不多说,进入正题。(下面这段可跳过,主要是为什么产生疑问和发现问题的)

【需求和疑问】

这个需求很简单其实就是将算法给过来的点坐标 X 和 Y (两个是 short 类型,各占16位,下文中使用 s16_t),存储到一个 unsigned int 类型(占32位,下文中使用 u32_t)的变量中,其中高16位存储 X, 低16位存储 Y;大概代码如下: 

​......     //前面是一些将算法坐标结果从队列中pop出来的代码

u32_t    headpoint;        // 在后面的正确使用中,高16位是 X,低16位是 Y
s16_t    tempArr[2] = {0, 0};

...

tempArr[0] = traj.center.Coor.nCoorY;    //这个traj是从队列取出的,nCoorX和nCoorY都是s16_t的
tempArr[1] = traj.center.Coor.nCoorX;
memcpy(&headpoint, tempArr, 2 * sizeof(tempArr[0]));

......     //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值