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. 科普:什么是ChatGPT?(文末有彩蛋)

    科普:什么是ChatGPT?(文末有彩蛋) ChatGPT介绍 ChatGPT是OpenAI开发的一个大型预训练语言模型.它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响 ...

  2. Android中的状态保存-SharedPreferences和Bundle(文末小彩蛋)

    SharedPreferences 是使用键值对的方式来存储数据的.也就是说当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来.而且Shared ...

  3. 五一在家宅5天?前端开发工程师必读书单送给你!(文末大彩蛋!)

    OMG,据说五一小长假马上就来了,所以你要去旅游(惊恐表情)了吗?如果你没有这项计划,小编建议你"用阅读丈量世界"! 今天为大家准备了前端开发工程师必读书单, 趁着京东423世界图 ...

  4. 做人工智能必看的 45 篇论文,附下载地址 | 文末有彩蛋

    而AI领域的发展会是IT中最快的.我们所看到的那些黑客技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进,就必须改 ...

  5. 新年伊始,我们共赴数据盛宴,与未来对话!​(文末有彩蛋)

    2018年1月3日,第四届清华大学大数据人才新春交流会如期而至.本届交流会继续秉承"跨界融合.谋求共赢"的理念,邀请了数据科学研究院管理委员会及教育指导委员会的代表.大数据培养项目 ...

  6. 新年伊始,我们共赴数据盛宴,与未来对话 !​(文末有彩蛋)

    2018年1月3日,第四届清华大学大数据人才新春交流会如期而至.本届交流会继续秉承"跨界融合.谋求共赢"的理念,邀请了数据科学研究院管理委员会及教育指导委员会的代表.大数据培养项目 ...

  7. 一款基于Kotlin+MVP+组件化的麻雀App(文末有彩蛋)

    热文导读 | 点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? 美团面试失败(Java开发) 程序员年度总结:2019年,你的出路在哪? 作者:CysionLiu (源码下载地址见文末) 来源 ...

  8. 再见了, VS Code!文末有彩蛋!

    点击上方"菜鸟学Python",选择"星标"公众号 重磅干货,第一时间送达 来源:github.blog/2020-05-06-new-from-satelli ...

  9. 说说每月至少一次的那点事,文末有彩蛋!

    老读者知道的,每个月都会有那么一次,图灵教育出版社的小姐姐会赞助一些 IT 优质书籍,我都会拿来反馈给读者,这个月也一样.无套路送书 9 本,以下 3 种书籍各自  3 本. 不用你看一堆公众号二维码 ...

最新文章

  1. linux环境调用gsoap,Linux下gSOAP的使用 (c++)
  2. C语言函数集(二十)
  3. matlab符号运算结果的分数怎么转化为小数
  4. powerdesigner 概念模型_“使用满足”分析框架下社交媒体用户持续使用行为的概念模型研究...
  5. 直播 | 同源共流:一个优化框架统一与解释图神经网络
  6. stata主成分分析_主成分分析在STATA中的实现
  7. java泛型方法无参_从头再来:Java泛型(开发必须知道的)
  8. 织梦DEDECMS网站留言板提交时验证码错误返回空白页的解决办法
  9. wait、notify、notifyAll和Condition
  10. 前端开发使用react实现简易路由
  11. android modbus 串口,android modbus RTU jssc连接
  12. Cook‘n Recipe Organizer X3 Mac(食谱管理器)激活版
  13. 如何写一手好 SQL!!!
  14. c语言坐标画图,C语言中绘图的函数库
  15. 计算机硬件基本常识面试,硬件工程师面试题集(含答案_很全)要点
  16. 在香港用什么软件可以唱歌?香港K歌app推荐
  17. LM2596DC -DC模块测试记录
  18. 无限创建gmail邮箱账号
  19. 计算机组成原理(动态随机存储器)
  20. Android按键之Menu详解

热门文章

  1. python爬取虎扑评论_Python爬取NBA虎扑球员数据
  2. 中断处理过程示意图_中断和中断处理流程
  3. JAVA学习6-集合工具类、流
  4. VMT进阶1-自发光
  5. opencv实时识别指定物体
  6. matlab 打开xml文件怎么打开方式,导入 XML 文档
  7. 今日头条如何运营,今日头条怎么运营好,今日头条运营技巧
  8. 基于51单片机的计步器步数检测无线蓝牙APP上传方案原理图设计
  9. chapter3 动态分析基础技术-01在线沙箱 微步云沙箱
  10. 「不安分」的新加坡, 「不拼单」的AI 造城记