c - C语言中的字节顺序和移位运算符,我做对了吗?
问题描述
原始代码工作正常,它是:
for(i = 0; i < 8; i++){
while(readPortAPin1() == BAIXO);
writePortAPin2(value & 0x01);
value >>= 1;
while(readPortAPin1() == ALTO);
}
在第一个代码中,如果 value = 10101010,它将作为 01010101 发送。我想更改传输顺序,例如,如果 value = 10101010,我想发送 10101010。
为了实现这一点,我做了以下代码:
for(i = 0; i < 8; i++){
while(readPortAPin1() == BAIXO);
writePortAPin2(value & 0x80);
value <<= 1;
while(readPortAPin1() == ALTO);
}
但是,它不起作用,它正在传输全 0。难道我做错了什么 ?
解决方案
显然writePortAPin2()
写入操作数的最低有效位。你需要写下最重要的位value
改变这个
writePortAPin2(value & 0x80);
对此
writePortAPin2((value >> 7) & 0x01);
推荐阅读
- c# - .NET Core WebApi Get HttpClient Error Message
- python - 如何将可变长度的numpy ndarray附加到一个空的numpy数组?
- r - 以向量为参数的 RSQLite 参数化查询
- asp.net-core - AspNetCore 无法在过滤器中设置 cookie
- java - How can you determine all of the places AWS access key values are used in a project in Java?
- c# - 此错误的来源是什么:没有与目标匹配的签名?
- angular - 更改第一个属性时,PrimeNg 表延迟加载未触发
- python - Python:如何修复进程内的随机种子?
- nested - 多个 httpclient 请求,依赖于使用 observables 的另一个 httpclient 请求的数据
- angular - 你如何处理 Angular 组件(不是控制器)中的变量范围?