String 发送以[CR][LF]结尾的字符串

String 发送以[CR][LF]结尾的字符串,string,delphi,newline,eol,String,Delphi,Newline,Eol,我的应用程序发送以[CR]+[LF]结尾的NMEA字符串。 NMEA标准规定了这种格式(例如来自陀螺罗盘的航向信息):“$HEHDT,2.0,T*2D[CR][LF]”。 在接收端,字符串被丢弃为不完整。 如何附加和发送这些字符 只需几行代码即可直接发送(对象是Cp1tx:TIdUDPServer;): 顺便说一句,我使用的是Delphi 10.1 Berlin。假设InStr是您要发送的字符串,它将是: Cp1tx.Broadcast(InStr + #13#10, 8051, '', I

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

只需几行代码即可直接发送(对象是Cp1tx:TIdUDPServer;):


顺便说一句,我使用的是Delphi 10.1 Berlin。

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

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

假设InStr是要发送的字符串,则它将是:

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

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

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顺序错误。

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

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

我编辑了我的答案,因为有人指出我的CRLF顺序错误。

有不同的方式来表达CRLF:

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


有不同的方式来表达CRLF:

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

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

历史评论: CRLF(按此顺序!)被发明用于由1/2马力电机供电的老式机械电传机。将托架移回左侧位置需要时间。这就是为什么先发送CR,然后发送LF,所以所有的机械师都有时间对齐并准备在新行上打印第一个字符

新手电传操作员通过艰苦的方式学会了这一点。发送LF和CR,然后键入文本,在向左行驶的过程中夹住了车架,打印臂缠绕在一起,驱动轴经常卡住或断裂。记住这是惊人的50波特的高速传输!我花了无数的时间在修理坏了的电传机上。好吧,现在情况不同了,更好了,但我们仍然坚持旧的CRLF惯例。

感谢你们大家。 我想我出丑了。无论我如何添加CRLF字符,它现在运行正常

历史评论: CRLF(按此顺序!)被发明用于由1/2马力电机供电的老式机械电传机。将托架移回左侧位置需要时间。这就是为什么先发送CR,然后发送LF,所以所有的机械师都有时间对齐并准备在新行上打印第一个字符


新手电传操作员通过艰苦的方式学会了这一点。发送LF和CR,然后键入文本,在向左行驶的过程中夹住了车架,打印臂缠绕在一起,驱动轴经常卡住或断裂。记住这是惊人的50波特的高速传输!我花了无数的时间在修理坏了的电传机上。好吧,现在情况不同了,而且更好了,但我们仍然坚持旧的CRLF惯例。

您没有显示一条语句将值赋给
InStr
。您想询问吗?您没有显示一条语句,该语句将值赋给
InStr
。你是想问什么?这是CR+LF,换句话说,你在这个答案中弄错了。你提到了偏好,但偏好并不包括在内。@DavidHeffernan说得很对。“回车线进纸”一词来源于打字机和电传打字机的工作原理——它们必须将打印机构沿印版(打印辊)返回到一个已知位置,然后才能正确进纸。实际上,@MartynA,这并不完全正确。我有几台打字机,你推一下手柄,就会出现换行,同时你会把它推到左边,只有当它到达左边时,你才有一个回车。所以,真正的手动打字机实际上执行了LF+CR。但电子打字机却执行了相反的操作:CR+LF。谁教你的#10+#13!CR=#13和LF=#10,所以正常序列是#13#10,使用#10#13可能会给你带来麻烦。Unix系统通常只使用#10,如果我没记错的话,旧的Mac系统只使用#13。不过,大多数系统都会默默地检测到这些序列,只要你一直工作,没有太多问题,除了可能会显示多余的空行。仅供参考,Indy已经在
IdGlobal
单元中声明了
CR
LF
EOL
(CRLF)常量。它是CR+LF,换句话说,你在这个答案中弄错了。你提到了偏好,但偏好并不包括在内。@DavidHeffernan说得很对。“回车线进纸”一词来源于打字机和电传打字机的工作原理——它们必须将打印机构沿印版(打印辊)返回到一个已知位置,然后才能正确进纸。实际上,@MartynA,这并不完全正确。我有几台打字机,你推一下手柄,就会出现换行,同时你会把它推到左边,只有当它到达左边时,你才有一个回车。所以,真正的手动打字机实际上执行了LF+CR。但电子打字机却执行了相反的操作:CR+LF。谁教你的#10+#13!CR=#13和LF=#10,所以正常序列是#13#10,使用#10#13可能会给你带来麻烦。Unix系统通常只使用#10,如果我没记错的话,旧的Mac系统只使用#13。不过,大多数系统都会默默地检测这些序列,只要您的工作没有太多问题,除了可能会显示多余的空行。仅供参考,Indy已经声明了
CR
LF
,以及
EOL
(CRLF)
IdGlobal
单元中的常数。EOL是否依赖于平台,或者它是否依赖于CRLFplatforms@DavidHeffernanIndy的
EOL
在所有平台上都是
CRLF
,因为Indy实施的大多数协议都使用CRLF