如何将回车符(\r、^M)表示为串行文本的一部分

如何将回车符(\r、^M)表示为串行文本的一部分

我正在尝试通过串行连接发送一条包含回车符(无需按 Enter 键即可表示)的消息。如果我在打开串行连接的情况下按 Enter 键,则该消息有效,但我尚未找到在消息正文中成功表示回车符的方法。

例如,以下操作可以通过 USB(屏幕 /dev/tty.usbmodemFA1331 9600)打开与我的 Arduino 的串行连接或使用 Arduino 串行监视器来实现:

SIOP v1.0 输出
内容类型:Text/UTF-8
值:“Hello World!”
/END

(请注意,我一次输入一行,并在每行之后按下键盘上的回车键)。

但以下尝试却不行:

  • SIOP v1.0 OUTPUT\rContentType: Text/UTF-8\rValue: "Hello slashr!"\r/END
  • SIOP v1.0 OUTPUT^MContentType:Text/UTF-8^MValue:“你好 m!”^M/END
  • SIOP v1.0 OUTPUT/rContentType:Text/UTF-80x0DValue:“Hello World!”0x0D/END

谢谢你!

答案1

如果我打开串行连接并按下回车键,它就会起作用,但我还没有找到在消息正文中成功表示回车符的方法。

诸如“\r”之类的特殊文本符号必须由输入或输出程序(例如,编译器)转换为单个控制字符(即字节值)。printf()字符串)。
这不会自动发生。
当然,终端仿真程序,如屏幕无法识别或对输入文本执行此类转换。

你似乎想做的事情是错误的。
典型的终端仿真程序,如微型计算机(并且可能屏幕但我不确定,因为我从未使用过它)在输入文字字符时传输它们。终端程序可以具有行(或块)模式,其中可以进行本地行编辑,并且(缓冲的)文本行(或块)仅在按下或按下某个键
后才传输。但这可能不是您正在使用的操作模式。 EnterSEND

典型的终端仿真程序以字符模式而不是行/块模式运行。(请注意,这与 termios 或规范模式与原始模式不同。)
因此尝试“代表邮件正文中的回车符...”(当你在键盘上打字时)只是意味着你试图抑制当地的光标被执行。您的目标没有实现,因为字符的传输不会被推迟(在当前操作模式下)。

您可以通过连接示波器或另一个终端来确认您尝试完成的操作是否徒劳。您应该能够验证您的“消息”是否按输入的字符/字节一次输出,而不是“行”或消息块。

如果你仍然坚持以整段文本的形式发送信息,微型计算机具有发送纯文本文件的能力。

相关内容