The differences between Carriage Return(CR) and Line Feed(LF)

本文详细解释了在不同操作系统中Carriage Return (CR),Line Feed (LF) 和 End of Line (EOL)的区别及作用。这些字符在LabVIEW等软件中的使用可能会导致不同平台上的文本显示差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem:
Putting a Carriage Return, Line Feed, or End of Line character in my strings in LabVIEW seems to all do the same thing.  What is the difference between these three characters?



Solution:
All three of these characters are ASCII representations for the end of the line.  In LabVIEW strings they all appear to have the functionality of the End of Line character (see below), however at the operating system level, they are each treated differently.

  The Carriage Return (CR) character (0x0D, \r) moves the cursor to the beginning of the line without advancing to the next line.  This character is used as a new line character in Commodore and Early Macintosh operating systems (OS-9 and earlier).

  The Line Feed (LF) character (0x0A, \n) moves the cursor down to the next line without returning to the beginning of the line.  This character is used as a new line character in UNIX based systems (Linux, Mac OSX, etc)

  The End of Line (EOL) character (0x0D0A, \r\n) is actually two ASCII characters and is a combination of the CR and LF characters.  It moves the cursor both down to the next line and to the beginning of that line.  This character is used as a new line character in most other non-Unix operating systems including Microsoft Windows, Symbian OS and others.

符号    ASCII码      意义
\n        10(0A)        换行NL
\r         13(0D)       回车CR

回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return
换行 \n 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line Feed
在不同的 操作系统这几个字符表现不同,比如在WIN系统下,这两个字符就是表现的本义,在UNIX类系统,换行\n就表现为光标下一行并回到行首,在MAC上,\r就表现为回到本行开头并往下一行,至于ENTER键的定义是与操作系统有关的。通常用的Enter是两个加起来。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。
但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。
一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
 
/*======================================*/
\n:  UNIX 系统行末结束符
\n\r: window 系统行末结束符
\r:  MAC OS 系统行末结束符
/*======================================*/

一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。(我有一篇介绍如何在linux下去掉该符号的文章)

c语言编程时(windows系统)
\r 就是return: 回到 本行 行首 这就会把这一行以前的输出 覆盖掉
int main() {
    printf("Carrige\rReturn");
}
则 显示
Return
最后只显示Return而 Carriage被覆盖了

\n 是回车+换行: 把光标 先移到 行首 然后换到下一行 也就是 下一行的行首拉
int main() {
    printf("Line\nFeed");
}
则 显示
Line
Feed
在 Python 中,`typing.List` 和 `list` 都是用来表示列表的数据类型,但它们有一些微妙的区别。 1. **类型提示(Type Hinting)**: `typing.List` 是从 `typing` 模块引入的一个泛型类型,用于声明变量或函数参数将存储的是列表。例如: ```python from typing import List my_list: List[int] = [1, 2, 3] ``` 这里我们明确指出了 `my_list` 将只包含整数。这提高了代码的可读性和文档性,虽然运行时并不强制类型检查。 2. **动态类型 vs 静态类型支持**: 如果你使用了静态类型检查器(如 PyCharm、Mypy 等),`List` 会提供类型安全的优势,帮助开发者发现早期的类型错误。 3. **灵活性**: `list` 是 Python 内置的动态类型列表,它可以存储任意类型的元素,包括未指定类型的元素。而 `typing.List` 则要求所有元素必须具有相同的类型。 4. **类型推断**: 在没有显式类型注解的情况下,Python 根据赋值和操作自动推断 `list` 类型。而在 `typing` 中,如果想要获得类似的行为,你需要显式地指定类型。 5. **鸭子类型(Duck Typing)**: Python 自带的 `list` 不受类型约束,如果你不介意类型错误,`typing.List` 的严格类型定义可能不如动态类型灵活。 总的来说,`typing.List` 更加严谨,适合大型项目中提高代码质量和类型安全;而 `list` 则更为灵活,适合快速原型设计和不需要严格类型检查的小规模代码。在实际编程中,两者可以根据具体需求灵活选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值