回车和换行的区别

2023-05-16

回车和换行的区别

  • 回车和换行的概念
  • 不同的系统间传递文件会涉及格式的转换
    • Unix -> Windows
    • Unix <- Windows

回车和换行的概念

首先介绍一下“回车”(carriage return,’\r’)和“换行”(line feed,’\n’)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

符号ASCII码意义
\n10换行NL
\r13回车CR

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧:

  • Unix 系统里,每行结尾只有“<换行>”,即“\n”;
  • Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
  • Mac系统里,每行结尾是“<回车>”,即“\r”。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。一些常见的转义字符如下图:
在这里插入图片描述
需要注意的是:在Windows系统中回车键被当做\r\n 的组合来使用,当我们从键盘输入回车键时,Windows系统会把回车键当做\r\n 来处理,Unix系统只会当做\n 来处理,不管在什么系统中,都可以用\n来作为一行输入结束的标记,只是在编程时我们需要注意,在Windows系统中我们会读到\r 这个字符,我们必须把\r和正常输入的字符区别开来。

Windows与Unix文件格式是不同的,问题一般就是出在\r\n问题上。回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:

  • windows采用回车+换行(CR+LG)表示下一行(亦即所谓的PC格式)
  • UNIX采用换行符(LF)表示下一行
  • MAC机采用回车符(CR)表示下一行

不同的系统间传递文件会涉及格式的转换

当在不同的系统间传递文件,就要涉及格式的转换。两种文件格式之间的转化:

Unix -> Windows

1、Unix -> Windows:‘\n’ -> ‘\r\n’

while ( (ch = fgetc(in)) != EOF )
{
    if ( ch == '\n' )
       putchar('\r');

    putchar(ch);
}

只要在Unix文件中出现的’\n’的之前加入一个’\r’字符就可以了

Unix <- Windows

2、Unix <- Windows:‘\n’ <- ‘\r\n’
从Windows到Unix的情况复杂点,不能只是把从文件中读出的’\r’去掉就可以了。因为Windows文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。所以在转换前要判断’\r’是否和’\n’同时出现。如果同时出现,则去掉’\r’,如果没有同时出现,保留’\n’。

cr_flag = 0;    /* No CR encountered yet */

while ( (ch = fgetc(in)) != EOF )
{
    if ( cr_flag && ch != '\n' ) 
    {
    /* This CR did not preceed LF */
       putchar('\r');
    }
    if ( !(cr_flag = (ch == '\r')) )
       putchar(ch);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回车和换行的区别 的相关文章

随机推荐

  • 转JSON时去除指定属性、JSONArray和JSONObject的顺序变化问题

    一 转JSON时去除指定属性 span class token comment 方法一 xff1a 遍历循环 xff0c 使用remove去除JSON属性 span JSONArray jsonList span class token o
  • java书城登录注册查询 原生servlet实现

    java书城登录注册查询 原生servlet实现 前言一 项目功能二 项目实现方法1 项目结构 总结图片展示结语另外 文章目录 前言一 项目功能二 项目实现方法1 项目结构 总结图片展示结语另外 前言 本人是一位破烂专科的大二学生 xff0
  • shell 美化工具(oh my posh)

    Chat 最近放寒假了 xff0c 这几天在学习小程序与go xff0c 然后经常逛github xff0c 看一些go的项目 xff0c 然后发现一个由go写的项目 xff0c 非常的不错 xff0c 它叫oh my posh xff0c
  • linux twm_回到TWM Linux桌面基础知识

    linux twm TWM是最不起眼的窗口管理器 xff0c 类似于您购买相框时获得的那些样本照片 Xorg随X11 Windows系统一起提供的基本的 xff0c 几乎是最低限度的概念证明 xff0c 可以证明确实可以为图形用户界面 xf
  • sequelize 爬坑【2】 Op 相关操作合集【转】

    const Op span class token operator 61 span Sequelize span class token punctuation span Op span class token punctuation s
  • Spring框架入门

    文章目录 Spring第1章 简介 61 61 1 1 Spring概述 61 61 Spring的下载地址1 3 Spring模块 61 61 Spring框架分为五大模块 xff1a 61 61 1 4 HelloWorld 61 61
  • 小米笔试真题一

    小米笔试真题一 第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题总结 第一题 下述算法的时间复杂度为 xff08 xff09 A O log2n B O n C O nlog2n D O n 2 span
  • C语言数组专题训练

    C语言数组专题训练 第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题 第一题 若有语句char s1 10 s2 10 61 books xff1b 则能将字符串 books 存放到数组 s1 的正确语句是 A strc
  • 逻辑结构与物理结构

    逻辑结构与物理结构 逻辑结构集合结构线性结构树形结构图形结构 物理结构 逻辑结构 简单的来说 xff0c 逻辑结构就是数据之间的关系 逻辑结构常见有四种类型 xff1a 集合结构 xff0c 线性结构 xff0c 树形结构 xff0c 图形
  • 乐鑫面试流程

    乐鑫面试流程 面试岗位笔试技术面试HR面电话聊天发offer 面试岗位 嵌入式软件实习生 笔试 题目分为选择题和编程题 xff0c 选择题二十题 xff0c 编程题两题 xff1b 选择题基本是一些计算机相关基础知识 xff0c 比较简单
  • 全局变量和静态变量的初始化

    全局变量和静态变量的初始化 全局变量 static变量初始化时间静态局部变量全局变量 不要写出和编译顺序相关的程序总结 全局变量 static变量初始化时间 静态局部变量 首先 xff0c 静态局部变量和全局变量一样 xff0c 数据都存放
  • 不同操作系统及CPU字长、寻址能力、指针宽度的理解

    不同操作系统及CPU字长 寻址能力 指针宽度的理解 字长CPU位宽CPU的寻址能力操作系统32bit 64bit指针大小 字长 64位CPU和32位CPU中64和32的含义 xff1a 64和32指的是CPU中的寄存器 通用 的字长 xff
  • new和malloc的区别

    new和malloc的区别 1 new从自由存储区上分配内存 xff0c malloc从堆上分配内存 自由存储区是C 43 43 基于new操作符的一个抽象概念 xff0c 凡是通过new操作符进行内存申请 xff0c 该内存即为自由存储区
  • 程序中的负数存储及类型转换

    程序中的负数存储及类型转换 负数在计算机中怎样存储什么是原码 反码 补码为什么要设置反码 xff0c 补码剖析本质 C语言数据类型转换 xff08 自动类型转换 43 强制类型转换 xff09 自动类型转换强制类型转换类型转换只是临时性的自
  • Java Collections singleton()方法与示例

    集合类singleton 方法 Collections Class singleton method singleton method is available in java util package singleton 方法在java
  • 找素数问题

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 嵌入式面试题

    面试题 字符串能直接比较大小吗typedef定义数组类型用法 字符串能直接比较大小吗 C 43 43 中字符串分两种 xff0c 一种是C语言的字符串 xff0c 一种是string字符串 C语言字符串是不可以直接比较大小的 xff0c s
  • 解决Endnote插入参考文献时导致word闪退问题

    问题描述 xff1a 通过endnote插入参考文献时 xff0c 会使得word闪退 原因分析 有像域代码之类的交互 xff0c 与endnote冲突 解决方法把word文档clean下 xff0c 即将域代码删除 解决方法 Ctrl 4
  • 音视频基础

    音视频基础 写在前面基础概念音视频直播推流和拉流什么是推流什么是拉流推流和拉流的区别 协议层 封装格式层 编解码层 像素层RTP RTCP RTMP RTSP区别RTP Real time Transport Protocol 实时传输协议
  • 回车和换行的区别

    回车和换行的区别 回车和换行的概念不同的系统间传递文件会涉及格式的转换Unix gt WindowsUnix lt Windows 回车和换行的概念 首先介绍一下 回车 xff08 carriage return r xff09 和 换行