信息编码 — 进大厂必备底层能力之一(文末有彩蛋)

3月18日 20:00 由C站白月光,20年码龄的技术VC大咖为大家带来 信息编码 — 进大厂必备底层能力之一,以下为直播文字实录:

今晚主题是一个偏底层的话题:【计算机信息编码】。

为什么选择这个话题呢?一是这个话题虽然底层,但是却是整个软件行业的基础,所以比较适合作为开场话题,另外,我们也顺便追一下热点。这一年多以来,由于疫情的关系,很多人被隔离出不了门,产生大量直播、会议类需求Zoom火了,钉钉火了,前一阵一款叫做Clubhouse的应用爆红网络。想要独立开发这类应用,我们必须掌握信息编码的原理,了解各种媒体数据是如何保存的,熟悉各类信息编码协议。

图片

二进制介绍

计算机本科教育中有一门课叫做计算机科学原理。

很多人都是在这门课中第一次接触到二进制,为什么优先学习二进制,原因也很简单,因为我们现在用到的计算机都是冯·诺依曼机,计算机做的所有工作都是对二进制数据的处理(电子计算机不都是采用二进制的吗?其实并不是这样,世界上第一台计算机埃尼阿克是采用十进制来处理数据的)。

计算机中最常见的就是字符型文件,在Windows中叫做文本文档,扩展名TXT,我们可以用记事本或者其他文本编辑器来创建和修改,初学计算机的同学也会把计算机的文件分类,判断哪些是文本文件,哪些不是。但严格意义上来讲,这种分类是不对的,因为文本文件本质上也是二进制的。

之所以大家会这么分类,完全是因为有一个叫做“C”的编程语言,在“C语言”的文件处理函数中,文件的打开方式定义了字符型文件和二进制文件,这种定义只是为了方便程序员能快速高效的处理数据内容,因而产生了一个巨大的误会。

让咱们的美女助手团子来给大家演示一下,从文本到多媒体数据,以及各种数据编码的细节,她会用到一个工具:【二进制编辑器】,如果是Linux或者Mac用户,可以直接用vim的二进制编辑模式完成实验。

我说文本文件本质上也是二进制的,不信你们看直播,我让团子给大家演示一下,用二进制编辑器来编写一个文本。用二进制编辑器输入一段二进制,让编辑器转换成Hello World!再用记事本来打开,看看是不是文本,相信参加沙龙的人里面,除了部分公司的HR以外大部分都是工程师或者准工程师。我们都清楚计算机里面的文档是怎么保存的,本质上计算机里的任何文件都是二进制的,而二进制编码的文件中最简单也是最容易理解的就是ASCII码。

图片

二进制与字符编码

ASCII码用8位二进制来表示一个字符,0100 0001表示 A,8位正好一个字节,从二进制来看,这一切都很顺理成章,因为只有8位,最多有2的8次方总排列方法,每一个字符都对应一个8位二进制的值。   

区分ASCII码大小写的关键是看二进制的左数第三位是否是1,尽管各种编码协议、规范确实是由人创造的,但也不是毫无规律可循。你说65就是A,很可能马上就会有人问,为什么A是65,你似乎根本就找不到一个令人信服的理由,大部分的老师就只能告诉学生,这就是规定,是发明ASCII的人规定的。

英文字符编码固然简单,26个字母加标点符号也不超过一百个,一个字节,一套编码,很容易普及开。世界上的语言有很多种,拉丁语系符号数量总体而言不算多,方块字、象形文字这种就比较麻烦了,文字符号数量太多,我们就无法只用一个字节去编码多国语言文字信息了。世界上的文字到底有多少种,每种文字又有多少种符号,这实在不好统计(还有不断被发掘和破解的古文字)

用1个字节只能编码2的8次方,256种符号,2个字节就是2的16次方 65536种符号,全世界的文字都保存下来2个字节明显不够,而且设计一套编码就囊括所有文字,这对编码设计者的学识要求也太高了点。

通常不同语言的编码都由不同的的本地团队完成,所以英文全球都使用ASCII,但是其他文字,比如中文,就远远不止一套编码了,GBK、GB2312等等。

选择4个字节,我们能同时编码2的32次方种符号,尽可能支持更多的文字,但是这样带来一个问题,就是保存一篇文章,一本书籍,会消耗更多的存储空间,如果只用1字节 2字节 则能编码的文字数量就会少很多

聪明的工程师自然有自己的解决方案,我们现在最常见的utf8编码就是这种指导思想下诞生的产物。让团子来给大家演示一下,用二进制编辑器来录入一段utf8文字。通过录入二进制数据,咱们可以看到工程师的世界是很奇妙的,Doc、PPT、JPG等等这类文档是通用数据格式文件,很多软件都能兼容并且读取文件内容,我们也能在网上查到数据格式协议的详细说明。

图片

修改游戏存档

因为游戏数据存档这类数据文件属于私有文件,而游戏开发商并不希望用户去动自己的存档,所以一般都会把存档文件藏得很深。

在CSDN能力认证的C1训练任务中有一个信息编码的学习任务,要求玩一款单机游戏的过程中修改游戏存档,跳过关卡,并且给自己充值。我们也现场让团子给大家演示一下。

事例:团子直接跳到4-1关,给自己充值10000,大家在看直播的话,也可以看到,修改这种文件也要格外小心,没有办法查询到数据格式说明,我们只能靠猜。而黑客们通常都很擅长去做这样的事情。

普通新手小白尝试的时候要记得备份好存档文件,游戏修改完,大家看到,数据编码无论是由程序来完成还是由人手工来完成,最终表现出来的结果都是一样的,所谓软件开发,其实也无非是通过程序设计来完成数据处理工作。

图片

媒体数据编码

回到今天直播的主题,现在的直播系统,会议系统,还有优酷土豆爱奇艺,clubhouse,他们的数据是如何编码的呢?

我们先让团子给大家演示一下多媒体数据的编码过程,大家就能很好的理解了。

一般桌面大小用像素来表示,例如1920x1080就是分辨率的大小,这是高清视频,8位二进制,只能表示2的8次方,也就是256种颜色,显然是无法展现出高清分辨率来的,所以如果要表示高清图片,需要用三个字节,也就是24位来表示一个点位,这样可以达到2的24次方种颜色,那么屏幕就非常丰富多彩,三个字节,其实也就是三原色,红绿蓝。

现在让团子现场给大家展示一下用二进制数据来画一个16x16点位的bmp图像,图片的元信息,也就是头信息,都是通过二进制来表示的,例如大小、宽高、色彩都可以,例如ff表示白色,00表示黑色。

信息编码如此重要,其实所有的软件开发,都是通过编程语言来操作二进制数据,程序媛画图都不一样,bmp的好处是通用格式,而且是高保真,但缺点是尺寸太大,再次打开图片看到有很多的ff,其实大部分都是多余的,这会给存储空间造成极大浪费,除了bmp以外,还有png、gif等其他图片格式,他们用的都是索引法,用数字来表示不同的颜色,在图片文件的二进制中,用索引值来保存不同的颜色值,这样就可以大幅减小图片大小,这就是png格式。

如果只是本地存储,png没有太大意义,但是如果用于网络传输,那么这就可以极大地节约带宽,jpg也是用的类似方法,除了图片,还有音频视频,音频常用的是傅立叶变换。

多媒体数据的视频编码中,多张图片整合到一起,涉及到H264和H265等格式!

图片

 

图片

 

图片

Mp4严格意义上来说,只是一种封装格式,MP4格式标准为ISO-14496Part12、ISO-14496Part14,MP4文件由许多个Box与FullBox组成,每个Box由Header和Data两部分组成,FullBox是Box的扩展,其在Box结构的基础上,在Header中增加8位version标志和24位的flags标志,Data为Box的实际数据,可以是纯数据,也可以是更多的子Box,当一个Box中Data是一系列的子Box时,这个Box又可以称为Container(容器)Box。

Mp4就是一艘大船,集装箱就是一个个的编码,有的编码表示音频,有的表示视频,有的表示文字,一个mp4文件在一个播放器上可能打开,而在另外一个播放器上可能就打不开了,就是因为mp4的封装属性,有的部分读取不出来,那就会打开失败,类似之前的二进制编辑器,也有很多音视频文件编辑器。

以上是今天数据编码文字实录,现在到了彩蛋时间:为了大家更好的学习,我们特为大家带来基础技术文章,进制转化和数据编码50篇,欢迎大家一键收藏。

图片

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值