搜索

帮忙看看这几行代码有什么问题,谢谢

[复制链接]
2042|8
tianxiongweitxw|  楼主 | 2021-6-10 19:43 | 显示全部楼层 |阅读模式
      帮忙看看这几行代码有什么问题,谢谢。字节数据能移动24位在与一个32位的变量逻辑与操作吗?   
SpiWriteAddr=((BYTE)IapReadByte(Spiaddress))<<24| SpiWriteAddr;
                   SpiWriteAddr=((BYTE)IapReadByte(Spiaddress+1))<<16| SpiWriteAddr;
                   SpiWriteAddr=(BYTE)IapReadByte(Spiaddress+2)<<8| SpiWriteAddr;
                   SpiWriteAddr=((BYTE)IapReadByte(Spiaddress+3))| SpiWriteAddr;

使用特权

评论回复

相关帖子

LcwSwust| | 2021-6-10 20:03 | 显示全部楼层
不能

使用特权

评论回复
tianxiongweitxw|  楼主 | 2021-6-10 21:17 | 显示全部楼层
强制转换成LONG了

使用特权

评论回复
tianxiongweitxw|  楼主 | 2021-6-10 21:44 | 显示全部楼层
我在想,系统会不会自动转成LONG再操作

使用特权

评论回复
xyz549040622| | 2021-6-10 22:53 | 显示全部楼层
1.我建议多加括号,不要用强制优先级
2.建议进行仿真跟踪就知道了
3.我觉得是可以的吧,但是要具体看仿真结果

使用特权

评论回复
QuakeGod| | 2021-6-11 00:04 | 显示全部楼层
那个运算符是 “或” 操作, 不是 “与”。

另外,为啥用这么笨的方法呢? 字节是最小访问单位。
直接定义一个联合体就行了。

union myunion{
int32 SpiWriteAddr;
BYTE bytes[4];
}u1;
u1.bytes[3]=(BYTE)IapReadByte(Spiaddress);
u1.bytes[2]=(BYTE)IapReadByte(Spiaddress+1);
u1.bytes[1]=(BYTE)IapReadByte(Spiaddress+2);
u1.bytes[0]=(BYTE)IapReadByte(Spiaddress+3);

然后 u1.SpiWriteAddr 变量里面就是正确的值了。

如果不想用联合体,就用指针。
((BYTE *)(&SpiWriteAddr))[3]=IapReadByte(Spiaddress);
((BYTE *)(&SpiWriteAddr))[2]=IapReadByte(Spiaddress+1);
((BYTE *)(&SpiWriteAddr))[1]=IapReadByte(Spiaddress+2);
((BYTE *)(&SpiWriteAddr))[2]=IapReadByte(Spiaddress+3);
效果是一样的。
本来就是简单的数据转移操作,真的用不着 与或非 啥的运算。
只有 操作的数据小于 最小单位(字节)的时候,没办法,才用与或非 勉强代替。

使用特权

评论回复

评论

tianxiongweitxw 2021-6-11 21:59 回复TA
用结构体,Spiaddress是高字节,Spiaddress+3是低字节,你这样处理的结果好像是反了。不过方法很好,谢谢指教。 
ayb_ice| | 2021-6-11 09:11 | 显示全部楼层
先强制转换成32位再移动,再与其它操作

使用特权

评论回复
dlutccj| | 2021-6-15 08:55 | 显示全部楼层
6楼正解

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥180.00
  • 2 最美葫芦娃 得到打赏 ¥155.00
  • 3 hk386 得到打赏 ¥75.00
  • 4 火星国务卿 得到打赏 ¥63.00
  • 5 两只袜子 得到打赏 ¥56.00
  • 6 laocuo1142 得到打赏 ¥50.00
  • 7 linghz 得到打赏 ¥45.00
  • 8 gaon2 得到打赏 ¥45.00
  • 9 ezcui 得到打赏 ¥45.00
  • 10 jlc317 得到打赏 ¥40.00
在线客服 快速回复 返回顶部 返回列表