首页 > 解决方案 > 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。难道我做错了什么 ?

标签: cendiannessbit-shift

解决方案


显然writePortAPin2()写入操作数的最低有效位。你需要写下最重要的位value

改变这个

writePortAPin2(value & 0x80);

对此

writePortAPin2((value >> 7) & 0x01);

推荐阅读