按位运算符并将int转换为2个字节并再次返回

aKi*_*iwi 6 c++ bit-manipulation arduino openframeworks

第一次用户,大家好!

所以希望有人可以提供帮助..我的背景是php所以输入低端的东西,如char,是字节,这是位...这是二进制值..等等需要一些时间才能得到好处;)

我试图在这里做的是从Ardunio板发送到openFrameWorks的一些值(都是c ++).

当被要求发送数据时,此脚本当前所做的事情(并且适用于我可能添加的一个传感器)是...

int value_01 = analogRead(0);  // which outputs between 0-1024

 unsigned char val1;
 unsigned char val2;

//some Complicated bitshift operation           
    val1 = value_01 &0xFF;
    val2 = (value_01 >> 8) &0xFF;  

    //send both bytes
    Serial.print(val1, BYTE);
    Serial.print(val2, BYTE);
Run Code Online (Sandbox Code Playgroud)

显然这是获取数据的最可靠方式..所以现在它是通过串口发送的,字节被添加到一个字符串中并由...转换回来.

int num = ( (unsigned char)bytesReadString[1] << 8 | (unsigned char)bytesReadString[0] );
Run Code Online (Sandbox Code Playgroud)

那么回顾一下,我试图获得4个传感器的数据(我假设这些序列中有8个?)并且在它的末尾有int num_01 - num_04 ....

我假设这个(和大多数事情一样)对于有这些概念经验的人来说可能很容易.

任何帮助将不胜感激.谢谢

R S*_*hko 7

编写一个抽象发送数据的函数(我已经删除了你的临时变量,因为它们没有增加太多的值):

void send16(int value)
{
    //send both bytes
    Serial.print(value & 0xFF, BYTE);
    Serial.print((value >> 8) & 0xFF, BYTE);
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以轻松发送所需的任何数据:

send16(analogRead(0));
send16(analogRead(1));
...
Run Code Online (Sandbox Code Playgroud)