0.1.0 |
|
---|
#52 in #传输层
24KB
437 行
Rust 的 DLE 编码器
此编码器提供了一个简单的 ASCII 传输层,用于串行数据。它使用 C0 和 C1 ASCII 控制字符 来实现这一点。您可以在 这里 找到一个 C++ 实现,以及 这里 的一个 Python 实现。
转义模式
编码流以 STX 标记开始,以 ETX 标记结束。流中 STX 和 ETX 的出现将被转义并内部编码,以便接收端可以简单地检查 STX 和 ETX 标记作为帧分隔符。当使用基于字符的严格接收方式接收使用 DLE 编码的包时,可以使用 STX 通知读取器实际数据将开始到达,而 ETX 可以用来通知读取器数据已结束。
示例
[0, STX, DLE] -> [STX, 0, 0, DLE, STX + 0x40, DLE, DLE, ETX]
非转义模式
编码流以 DLE STX 开始,以 DLE ETX 结束。流中所有 DLE 的出现都使用 DLE 转义。如果接收器检测到一个 DLE 字符,则需要读取下一个字符以确定是否检测到了帧的开始(STX)或结束(ETX)。
示例
[0, STX, DLE] -> [DLE, STX, 0, DLE, STX, DLE, DLE, DLE, ETX]