C语言中的字节顺序和移位运算符,我做对了吗?
Endianness and shift operator in C language, am I doing it correctly?
原始代码工作正常,它是:
for(i = 0; i < 8; i++){
while(readPortAPin1() == BAIXO);
writePortAPin2(value & 0x01);
value >>= 1;
while(readPortAPin1() == ALTO);
}
在第一个代码中,如果值 = 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);
原始代码工作正常,它是:
for(i = 0; i < 8; i++){
while(readPortAPin1() == BAIXO);
writePortAPin2(value & 0x01);
value >>= 1;
while(readPortAPin1() == ALTO);
}
在第一个代码中,如果值 = 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);