【问题标题】:Why is my data converted to ASCII using Serial.print function in arduino?为什么我的数据在 arduino 中使用 Serial.print 函数转换为 ASCII?
【发布时间】:2016-03-14 15:16:00
【问题描述】:

我正在编写一个小软件来使用 RN2483 收发器发送数据,并且我意识到当我通过串行发送数据时,我的数据被转换为 ASCII。也就是说,我在sender里面有以下部分,数据必须是HEX

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

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

提前致谢,

问候

【问题讨论】:

  • 这有点不清楚。拥有 HEX 并成为 ASCII 是什么意思?您只能通过两种方式发送它:直接字节(表示 ASCII 中的 H 和 I)或字节的 ASCII 表示(表示文本 0x48 0x49)。如果是第一个,只需发送message
  • 我的意思是,我必须发送 HEX 值,而不是 ascii 值,但我确实看到我的 HEX 数据正在映射到 ASCII
  • 再一次,你能说明你的真正意思吗?什么是“发送 HEX 值”?当您只有dataToBeTx = "radio tx " + message + "\r\n"; 并发送它时它是否有效?是这个意思吗?

标签: string arduino


【解决方案1】:

目前还不清楚您要达到的目标。代码中的第一行将单个字符转换为十六进制的 string。例如:

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。也就是两个字节长的字符串。

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

如果我再次将该值转换为十六进制,我得到的东西与我的 H 或 I 不同

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

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

【讨论】:

  • 我只想发送一个 0x41,我发现它是函数 Serial1.print 将其编码为 ASCII 字符的函数,所以我所做的是一个 ASCII 到 HEX 函数接收方
猜你喜欢
  • 1970-01-01
  • 2014-12-16
  • 2019-04-24
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2021-09-23
相关资源
最近更新 更多