为什么我的数据在arduino中使用Serial.print函数转换为ASCII?

时间:2016-03-14 15:16:01

标签: string arduino

我正在编写一个小型软件,用RN2483收发器发送数据,我已经意识到当我通过串口发送数据时,我的数据被转换为ASCII。也就是说,我在发件人中有以下部分,数据必须是HEX

String aux = String(message.charAt(i),HEX);
dataToBeTx = "radio tx " + aux+ "\r\n";
Serial1.print(dataToBeTx)

在接收器上我正在读取Serial1,直到我收到正确接收的消息,但它是HEX数据的ASCII表示,我想要它的HEX,我的意思是,我发送转换后的HI接收器上的HEX(HI => 0x48 0x49)如果我再次将该值转换为HEX,我得到的东西比我的H或I不同,所以我猜它是用ASCII编码的,我怎么能从那里开始呢? / p>

提前致谢,

问候

1 个答案:

答案 0 :(得分:1)

目前还不清楚你想要实现的目标。代码中的第一行将单个字符转换为十六进制的字符串。例如:

void setup ()
{
  Serial.begin (115200);
  Serial.println ();

  String aux = String('A', HEX);
  Serial.print ("aux = ");
  Serial.println (aux);

}  // end of setup

void loop ()
{
}  // end of loop

输出:

aux = 41

所以我的代码中的'A'(内部表示为0x41)现在变成了两个ASCII字符:41。也就是说,一个两个字节长的字符串。

所以,从某种意义上说,你可以说它已经是十六进制了。

  

如果我再次将该值转换为HEX,我会得到与H或I不同的东西

嗯,是的,如果你再次翻译它,那么你会得到0x34和0x31。

在这种情况下,您想发送A41还是其他?