接收以十六进制读取的消息



我在lunix/windows 中使用arduino 1.0.5进行编程

使用这段代码:

void readSerialString () {
    char buffer[8];
    if(Serial.available()) {
        while (Serial.available()){
            sb = Serial.read();
            buffer[indexB] = sb;
            indexB++;
        }
      }
        Serial.println(buffer);
}

我正试图(通过串行终端)发送一条可以用十六进制显示的消息。

例如,如果我写:"\xaa\x22\xa1"它不会读成十六进制,是吗?

如何让程序将输入中的字符串读取为十六进制?

不要搞错数据及其格式。你可以访问printf吗?如果是,请使用printf("%x",char)将字符视为十六进制。

Arduino解决方案串行打印(78,HEX)给出"4E"

参见http://arduino.cc/en/Serial/Print

[编辑]

我需要相反的印刷品。我需要将来自串行终端的令牌字符串解释为十六进制。

要做到这一点,请使用read(),但您必须实现从ascii HEX到数据的转换函数,作为一个字节的HEX数据,需要2个字符,我的函数需要两个字符作为输入)

char hex_ascii_to_databyte(char c1, char c2){
    char res=0;
    if(c1>=48 && c1<=57) res = c1-48;
    else if(c1>=65&& c1<=70) res = c1 - 65 + 0xa;
    else if(c1>=97&& c1<=102) res = c1 - 97 + 0xa;
    else{//error
    }
    //idem c2 in res2
    res=res<<4;
    res+=res2;
    return res;
}

对于每个十六进制读取,调用两次read(读取2个ascii字符),然后调用此函数

最新更新