C中的按位移位问题

C中的按位移位问题,第1张

概述我有一个32位数字,我想从中创建4个8位数字.例如: 如果32位数是0xABCD1234, 8位数组必须是这样的: dataArray [0] = 0x34;  dataArray [1] = 0x12;  dataArray [2] = 0xCD;  dataArray [3] = 0xAB; 所以我想通过移动32位值并屏蔽LSB部分来实现它.以下代码段效果很好: uint32_t unique 我有一个32位数字,我想从中创建4个8位数字.例如:

如果32位数是0xABCD1234,
8位数组必须是这样的:

dataArray [0] = 0x34;
dataArray [1] = 0x12;
dataArray [2] = 0xCD;
dataArray [3] = 0xAB;

所以我想通过移动32位值并屏蔽LSB部分来实现它.以下代码段效果很好:

uint32_t uniquenumber = 0xABCD1234; uint8_t  dataArray[8];int      j;uint32_t  shifted = 0;for(j=0;j<4;j++){    shifted = (uniquenumber>>(j*8));    dataArray[j] = shifted & (0xFF);}

但是,如果我试图通过移除移位变量并将其计算直接传输到主计算来缩短它,则它不起作用.我无法弄清楚差异,为什么它不起作用.这是编辑后的代码段不起作用.

uint32_t uniquenumber = 0xABCD1234; uint8_t  dataArray[8];int      j;for(j=0;j<4;j++){    dataArray[j] = (uniquenumber>>(j*8)) & (0xFF);}

第二个片段的输出在这里:

dataArray [0] = 0x34;
dataArray [1] = 0x12;
dataArray [2] = 0x00; //假.
dataArray [3] = 0xAB;

顺便说一句,这是一个在微控制器上工作的嵌入式程序.我认为这不是打印问题,因为我没有通过打印 *** 作来观察它.我在调试模式下使用Watch观察它.此外,我可以在同一窗口观察第一个片段,并且值是正确的.

更新:以下是两种方式的解散.

对于第一个片段:

而对于第二个片段:

编译器:ARM GCC 4.9-2015-q1-update

调试器:赛普拉斯PSoC Creator 3.3

MCU:CYBLE-022001

我将与赛普拉斯联系,我猜他们可以给出一个暗示.如果我们解决它,我会发布答案.

解决方法 问题解决了:感谢@LPs,

我将断点传输到3行并且错误的值才变为真.我不知道为什么,但我已经把断点放到了一个我确定for循环已经完成的地方.它现在运作良好.

总结

以上是内存溢出为你收集整理的C中的按位移位问题全部内容,希望文章能够帮你解决C中的按位移位问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存