在Arduino以太网服务器客户端中读取错误的unsigned long值

时间:2015-02-16 21:25:48

标签: arduino bit-manipulation bit-shift

当我尝试使用Arduino以太网读取unsigned long值时,我只获得了一半的值。十六进制值应为0x98765432,但结果为0x5432。我做错了什么?

unsigned char bufArr [4];

for void loop() {
    EthernetClient client = server.available();
    if (client) {
        Serial.println("new client");
        while (client.connected()) {
            if (client.available()) {
                //read 4 bytes
                client.read(bufArr,4);
                //use shift to convert it to a unsigned long
                unsigned long irCmd = bufArr[3]<<24|bufArr[2]<<16|bufArr[1]<<8|bufArr[0];
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

从您的代码中,我得到您使用以下代码行获取此hex文件:

无符号长irCmd = bufArr [3]&lt;&lt; 24 | bufArr [2]&lt;&lt; 16 | bufArr [1]&lt;&lt; 8 | bufArr [0];

现在问题是你正在使用bufArr [3]来bufArr [0],这意味着你正在读取从4到0的总共4个值,这就是为什么你只得到4个值,从bufArr [7]读取你会得到所有8个值。