发送以[CR] [LF]终止的字符串

时间:2016-07-08 10:19:18

标签: string delphi newline eol

我的应用程序发送以[CR] + [LF]终止的NMEA字符串。 NMEA标准规定了这种格式(例如来自陀螺罗盘的航向信息):'$ HEHDT,2.0,T * 2D [CR] [LF]'。 在接收端,字符串被丢弃为不完整。 如何附加和发送这些字符?

发送很简单,只有几行代码(对象是Cp1tx:TIdUDPServer;):

...

    Cp1tx.Active:= true;
    Cp1tx.Broadcast(InStr,8051,'',IndyTextEncoding_8Bit);
    Cp1tx.Active:= false;

...

顺便说一下,我正在使用Delphi 10.1柏林。

4 个答案:

答案 0 :(得分:5)

假设InStr是您要发送的字符串:

Cp1tx.Broadcast(InStr + #13#10, 8051, '', IndyTextEncoding_8Bit);

答案 1 :(得分:0)

表达CRLF的方法有多种:

Instr := '$HEHDT,2.0,T*2D'#13#10;

Instr := '$HEHDT,2.0,T*2D'#$D#$A;

// CR and LF are defined in the IdGlobal unit
Instr := '$HEHDT,2.0,T*2D'+CR+LF;

// EOL is defined in the IdGlobal unit
Instr := '$HEHDT,2.0,T*2D'+EOL;

答案 2 :(得分:0)

感谢大家。 我想我自欺欺人了。无论我如何添加CRLF字符,它现在运行正常。

历史评论: CRLF(并按此顺序!)被发明用于由1/2 HP电机驱动的旧机械电传机器。将滑架移回左侧位置需要一些时间。这就是CR首先发送然后发送LF的原因,所以所有机制都有时间对齐并准备好在新线上打印第一个字符。

新手电传操作员很难学到它。发送LF和CR然后键入文本将托架困在向左的路上,类型的臂缠结,通常驱动轴卡住或断开。记住这是惊人的50波特的高速传输!我花了无数个小时修理破坏的电传机器。嗯,现在情况有所不同,但我们仍然坚持旧的CRLF惯例。

答案 3 :(得分:-1)

当我需要经常发送CR + LF时,我声明一个Const并根据需要引用它。

Const
CRLF = #13+#10;

{ To use this do the following }

MyString := 'This string ends with a Carriage Return / Line Feed'+CRLF;

您还可以使用Chr(10)+ Chr(13)添加回车/换行;

例如;

    MyString := 'This string also ends with a CRLF' + Chr(10) + Chr(13)
    + 'But it could equally end with an Escape Code' + Chr(27) // or #27

我已经编辑了我的答案,因为有人指出我的CR LF输入顺序错误。