ASCII 字符“NUL”的值为 0。是否可以通过串行线路发送此字符,而不会将其解释为没有发送数据?
答案1
当然可以。字符的构造与内容是分开的。八位零绝对不可能被固有地解释为“没有数据发送”——就像一个充满零的磁盘扇区绝对不可能被固有地解释为“没有数据发送”一样。
详细说明:在典型的异步串行中,您有一个起始位,然后是八个数据位,然后是一个停止位。您仍然会有八个数据位 - 它们恰好都是零。起始位和停止位告诉接收器“这是一个字符”。字符中的位是什么并不重要。
如果接收程序碰巧将 NUL 解释为“无数据”,那是它的事情,但这是一个应用层问题。
例如,如果接收程序是终端仿真器,那么它在收到 NUL 时很可能不会执行任何操作(因为大多数实际终端都是这样做的)。串行端口 API 仍将记录收到 NUL 字符并将其交给程序。是终端仿真器决定“哦,我将忽略它”。
有很多应用程序通过异步串行线路发送“二进制”数据,如果根本没有发送或接收 NUL,这些应用程序就会失败。
有关详细信息,请参阅For more info, seehttps://en.wikipedia.org/wiki/Asynchronous_serial_communication
答案2
串行协议有起始位和停止位,数据被限制在这些位内 - N81(无奇偶校验,8 位,1 个停止位允许您发送任何 ASCII 字符,并且是 1 种通用编码),因此通过发送起始位或不发送起始位可以区分无和空。