换行字符

回忆上次内容

  • struct包可以让我们使用封包格式
  • 把数字封包到字节里
  • pack函数负责封包
  • unpack函数负责解封
  • 我们通过封到不同的字节状态
  • 遍历了一次ascii码

编辑

  • 还是有那片黑色的区域
  • 好像是一片黑暗森林!
  • 那里面到底有些什么秘密?
  • 我们这次向黑暗森林区域进发!!
  • 整理行装
  • 出发!

chr

  • 先看看"oeasy"这个字符串是如何存在的

编辑

  • 字符都对应着一个数字
  • 数字在计算机上究竟是如何存储的呢?
  • 用二进制形式存储在字节中的
  • 可以看看这个二进制形式么?

chr

  • 8bit 构成 byte

编辑

  • 上图的字节为
  • (0011 0101)2
  • (35)16
  • 对应着字符'5'

编辑

  • 那字母呢?
  • abcd在内存里长什么样子?

文件编码

  • 编写一个文件
  • 写下 abcd
  • 用 ​​:%!xxd​
  • ​:%!xxd -r​​ 变回来

编辑

  • 可以看到文件是用 2进制 方式存储的
  • 0x61 - a
  • 0x62 - b
  • 0x63 - c
  • 0x64 - d
  • 不论是内存、硬盘还是网络传输
  • a 对应
  • (0x61)16
  • (0b01100001)2
  • 图中最后的那个 0x0a 对应什么字符???

善用函数

  • 使用chr得到相关字符

编辑

  • 0x0a对应的是'\n'这个字符
  • 这个字符好像在哪里见过?

回到最初

  • 想要了解这个'\n'
  • 我们还得回到最初
  • 我们回到开始的时候

编辑

  • 前面介绍过
  • BWK写的 c 语言的第一个程序

\n

  • 注意到​​hello world​​后面的​​\n​​了么?
  • 注意到​​hello world​​后面的​​\n​​了么?
  • 特别注意斜杠的方向
  • 这个方向​​\​​叫反斜杠
  • 键盘位置在回车键附近

编辑

  • 那​​\n​​到底是什么??

输出"\n"

  • ​\n​​ 是一个整体
  • 占一个字节
  • 算一个字符
  • 序号是(​​10​​)​​10进制​
  • 也就是(​​0x0a​​)​​16进制​
  • 这就是在开篇时的​​abcd​​后面的字符
  • \n在内存里显示为一个.

编辑

  • 我们直接把他输出看看

输出

  • 输出
#输出\n
print("\n")
#直接print
print()
#查看序号
ord("\n")
#查看十六进制的序号
hex(ord("\n"))
  • 输出结果

编辑

  • 好像换了 2
  • 如果没​​\n​​的话,只换 ​​1​​ 行
  • 如果有​​\n​​的话, 就换 ​​2​​ 行
  • 我们看看ascii码表是如何定义的这第10个字符的

找到位置

  • 我们已经身在在黑暗森林中
  • 找到了一个落脚点

编辑

  • 十进制的​​10​​ 就是 十六进制的 ​​0x0A​
  • 这个数值在 ​​ascii​​ 码表中意思是 ​​LF​
  • 啥意思?

搜索

  • 搜索​​\n​​得到的结果是这样的
  • LF 意味着 Line Feed
  • 喂行
  • 喂一行纸

编辑

  • 那我真的可以用这个​​\n​​在字符中间换行嘛?

尝试换行

#输出字符串中带有\n
print("Hello\nWorld")
  • 在游乐场中尝试

编辑

  • 中途换行成功!
  • 可以多来几个换行符吗?

多来几个

  • 就往里面加​​\n​
#输出字符串中带有\n
print("He\nllo\nWor\nld")
  • 显然这个 ​​\n​​ 就是一个换行
  • 字符串里面有个 ​​\n​​ 就意味着需要换 1 行
  • 他的英文是 ​​Line Feed​
  • 意思就是 ​​新换1行​
  • 这个东西其实比 ascii 的历史还要悠久
  • 从打字机的时代就有了

编辑

  • 为什么要有换行符呢?

换行符

  • 最最开始的时候分段落
  • 都是靠打字机输出空格完成换行
  • 自从有了这个​​L​​ine​​F​​eed
  • 一个键就直接换行了
  • 所以​​L​​ine​​F​​eed 极大地提高了效率

编辑

  • 两个换行符就换两行
  • 可以使用chr函数么?

使用序号得到换行符

#输出ascii值为10的字符
chr(10)
#把这个字符放在print里面输出
print("hello"+chr(10)+"world")

编辑

  • 纯文本中也会有回车符么?
  • 我们去看看纯文本文件

打开文本文档

https://github.com/overmind1980/oeasy-python-tutorial.git
vi oeasy-python-tutorial/samples/000016/anderson_fairy_tales.txt
  • 首先下载这个仓库
  • 然后找到其中的安德森仙话这个本书

编辑

  • 我们发现这个东西是318K
  • 那他有多少字符呢?

字符数量

  • 1个英文字符占一个字节
  • 318k大概有318000个字节
  • 大概是31.8万个字符

编辑

  • 这就是文本文件的形式
  • 第一行的Andersen后面有应该有两个换行符
  • 是不是呢真有换行符呢?

字节形式

  • 所有行转化为字节形式
  • %!xxd
  • 查找0a
  • /0a

编辑

  • 确实能够找到那两个换行符(0a)
  • 这可以和纯文本方式对应起来吗?

纯文本方式

  • 文本中的换行
  • 其实就是换行符的效果
  • 在文本观看模式下是换行

编辑

  • 在字节观看模式下是0a

编辑

  • 这本书后来被翻译成安徒生童话

安徒生童话

  • 里面有很多耳熟能详的故事
  • 《皇帝的新装》
  • 《海的女儿》
  • 《丑小鸭》
  • 《红舞鞋》
  • 《卖火柴的小女孩》
  • 《拇指姑娘》

编辑

  • 在安徒生所处的时代(1805-1875)
  • 丹麦仍是一个君主专制主义社会
  • 20年代经济衰退
  • 童话用儿童视角透视复杂生活
  • 万物有灵
  • 风趣幽默
  • Jean Hersholt
  • 将160个故事从丹麦文翻译成英文
  • 刘半农 1914年
  • 翻译了《皇帝的新衣》开始
  • 叶君健 1944年到1949年
  • 翻译了 安徒生童话全集
  • 互联网时代
  • 英文版安徒生童话被谷腾堡项目所收录

落实

  • 文档当中就是用0和1来表示字符的
  • 如下图所示
  • 文字是蓝色的
  • 字节是黑色的

编辑

  • 为什么\n会用来表示换行(Line-Feed)呢?

追溯历史

  • ​c语言​​ 中的 ​​\n​​ 来自于什么呢?
  • 来自于 ​​B语言​
  • ​B语言​​ 是里奇和汤普逊最早开发 ​​unix​​ 的语言
  • ​B语言​​ 1969 年 就 运行在​​bell实验室​​ 的 ​​PDP-8​​ 上
  • 1971 年里奇和汤普逊开始对于 ​​B语言​​ 进行改造
  • 在新买的 ​​PDP-11​​ 上用 ​​B语言​​ 给 ​​B语言​​ 写扩展,称之为 ​​NewB​
  • 1973 年 ​​NewB​​ 基本主体完成
  • 改名叫 ​​c语言​
  • 所以 ​​c​​ 其实是 ​​NewB​
  • 他们用手头的编译器和​​c语言​​给 ​​PDP-11​​ 重写了一个 ​​Unix Kernel​
  • 机器语言和汇编语言本来不具有移植性
  • 就像x86的二进制程序不能直接运行在arm上
  • 需要移植
  • ​c语言​​ 程序却可以在 ​​很多架构​​ 的处理器上编译运行
  • 只要那种架构的处理器具有对应的 ​​c语言编译器和库​
  • 那就能顺利编译成针对该处理器架构的二进制程序
  • 甚至能实现跨平台编译
  • 也就是今天所说的交叉编译
  • 这就是 ​​c语言​​ 在当时能够发展的原因

编辑

  • ​c语言​​ 源自 ​​B语言​
  • ​B语言​​ 也不是凭空创造的
  • 源自什么呢?

Basic Combined Programming Language(BCPL)

  • ​B语言​​ 源自​​BCPL(Basic Combined Programming Language)​
  • 1967 年由剑桥大学的 ​​Matin Richards​​ 制作

编辑

  • 在同样由剑桥大学开发的 ​​CPL语言​​ 上改进而来
  • ​BCPL​​ 最早被用做牛津大学的 ​​OS6操作系统​​ 上面的开发工具

编辑

  • 后来通过美国贝尔实验室的改进和推广成为了 ​​UNIX​​ 上的常用开发语言
  • 最早 ​​BCPL​​ 语言的样子就有个类似于l(ine)f(eed)的符号
  • 这是关于换行符表示法 最早的记录
  • 当时的换行符长什么样呢?

BCPL的换行符

  • 当时的换行符长成这样
  • !\*n

编辑

  • 上述程序的目是
  • 输出 hello,world
  • 然后再来个回车
  • 所以hello world
  • 并不是c语言的发明
  • 而是从c语言的爷爷bcpl那时候就有了
  • 并且从bcpl时代就已经作为迷因(meme)开始传播
  • python虚拟机的可执行文件
  • 也就是pyc文件是如何理解换行符的呢?

反汇编(disassemble)

  • 观察一下

编辑

  • \n出现在字符串常量中
  • 能在pyc中找到这个常量么?

先编译

  • 将py文件编译成pyc文件

编辑

  • 再观察

pyc文件

  • 打开pyc文件

编辑

  • 确实能够找到a和s之间的\n
  • 也就是(0a)16进制
  • 任务完成!!!

总结

  • ​\n​​ 就是换行符号
  • 换行符对应着 ​​ascii​​ 字符的代码是(​​10​​)​​10进制​
  • 换行符的英文是 LF
  • 意思是​​Line Feed​
  • 我们可以在《安徒生童话》的文本中
  • 找到每个字符对应的字节形态

编辑

  • 不光txt文件是文件
  • 我们的python游乐场本质上也是一个二进制可执行的文件
  • 这个文件在哪?

[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话的更多相关文章

  1. Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

    在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...

  2. addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

    . 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串. 注释:默认地,PHP 对所有的 GET.PO ...

  3. mysql 的 help 命令:每个命令,都有相应的反斜杠(\)加一个字母或字符的简写

    mysql> help For information about MySQL products and services, visit: http://www.mysql.com/ For d ...

  4. [Asp.net]c#中的斜杠和反斜杠

    引言 在外地出差,给客户部署项目,三家做的项目要在一起集成,这就造成数据格式不同,路径中的斜杠和反斜杠造成了很大的问题. 查了一下这方面的资料,这里做一些记录,算是一个小结吧. 正斜杠(/)与反斜杠( ...

  5. Linux下反斜杠号"\"引发的思考

    今天在检查home目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开. ubuntu@ubuntu:~$ vi \> ub ...

  6. Linux Bash环境下单引(')、双引号(")、反引号(`)、反斜杠(\)的小结

    在bash中,$.*.?.[.].’.”.`.\.有特殊的含义.类似于编译器的预编译过程,bash在扫描命令行的过程中,会在文本层次上,优先解释所有的特殊字符,之后对转换完成的新命令行,进行内核的系统 ...

  7. python 3.3.3 字面量,正则,反斜杠和原始字符串

    两个不起眼但是比较重要的设定 Python str类型的字面量解释器 当反斜杠及其紧接字符无法构成一个具有特殊含义的序列('recognized escape sequences')时,Python选 ...

  8. 【C++】反斜杠“\”的作用

    转自 https://blog.csdn.net/ismallboy/article/details/8082514 转义字符:如:\n表示回车+换行等. 续行符:这个需要注意一下,在一般的语句中,这 ...

  9. 每日linux命令学习-引用符号(反斜杠\,单引号'',双引号"")

    引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(’‘),双引号(“”). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要 ...

  10. [转载]Python正则表达式匹配反斜杠'\'问题

    转载自csdnblog:Python正则表达式匹配反斜杠'\'问题 在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)? 一.引入 在学习了Python特殊字符和 ...

随机推荐

  1. pgsql安装与主从配置搭建

    一:安装环境 查看一下安装环境:cat /etc/centos-release CentOS Linux release 7.7.1908 (Core) 二:软件下载 https://www.post ...

  2. 智影AI故事转视频创作神器!快速开启AI绘画小说推文之旅

    1.前言 1.1 生成内容形式 生成内容形式主要包含三种,PGC(Professionally Generated Content).UGC(User Generated Content).AIGC( ...

  3. ReplayKit2 有线投屏项目总结

    一.实现目标 iOS11.0以上设备通过USB线连接电脑,在电脑端实时看到手机屏幕内容 画质达到超清720级别,码率可达到1Mbps以上 二.实现技术方案设计 1.手机端采用ReplayKit2框架, ...

  4. 小程序转发 搜索wxml

    新闻转发 在小程序中要不通过菜单项来完成分享功能,只能通过表单组件中的按钮来完成. 它是通过按钮中的开放能力完成 按钮自定义处理 新闻搜索 搜索wxml 搜索业务的js

  5. kettle从入门到精通 第四十五课 ETL之 kettle redis

    1.kettle 9.3/9.4 spoon客户端中默认是没有redis步骤的,首先想到在kettle的插件市场进行下载redis步骤. 2.可能因为网络原因,直接下载失败了.索性放弃redis原有插 ...

  6. 算法金 | 只需十四步:从零开始掌握Python机器学习(附资源)

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 1. 引言 1.1 教程目的与读者定位 "启程"往往是最具挑战性的 ...

  7. java springboot 读取自定义配置文件

    java springboot 读取自定义配置文件 application.properties.test.properties maven中引用 : <dependency> <g ...

  8. vm ware cent os 共享文件夹

    1.VM中安装vm-tools 2.在VM 虚拟机设置中添加共享文件夹. 3.重启虚拟机 4.在/mnt/ 里新建一个名为"win"的文件夹 5.在cent os 中执行: vmw ...

  9. nfs笔记整理

    NFS---共享存储系统 #network file system 网络文件系统 ​ #NFS主要使用在局域网下,让不同的主机之间可以共享文件.或者目录数据.主要用于linux系统上实现文件共享的一种 ...

  10. Vue学习:14.工程化开发&脚手架

    0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 方向一:学习路径 1.明确兴趣和目标:首先确定你对IT ...