字节、字符、编码

在Socket网络编程开发时,需要解析消息数据。其中涉及到了字节、字符、编码的知识,在网上查了一些资料,记录下来以便查阅。

字节

字节是计算机处理数据的基本单位。

  • 位(bit)
    位表示的是二进制位,是计算机存储的最小单位,一个二进制位只可以表示0和1两种状态。

  • 字节(Byte)
    字节是计算机中表示存储容量的基本单位。一个字节由8位二进制数组成,通常用B表示。


  • 计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(Word)。一个字通常由一个或多个(一般是字节的整数倍)字节构成。
小结

常见的存储单位的换算关系如下:

1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024TB
1TB=1024GB
两个字节称为一个字(Word)
两个字称为一个双字(dword)
两个双字称为一个四字(qword) 

位是二进制位,只能是0,1代码。而四个二进制数可以表示一个16进制数(4位), 因此一个字节(8位)可以由两个16进制的数表示。


字符

  • 字符
    字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
  • 字符集(Charset)
    字符集是一个系统支持的所有抽象字符的集合。
  • 字符编码(Character Encoding)
    字符编码是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

编码

  • 为什么要编码

不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编码。所以可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。这看起来有些霸道,但是这就是现状,这也和我们国家现在在大力推广汉语一样,希望其它国家都会说汉语,以后其它的语言都翻译成汉语,我们可以把计算机中存储信息的最小单位改成汉字,这样我们就不存在编码问题了。
所以总的来说,编码的原因可以总结为:
1.计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个
2.人类要表示的符号太多,无法用一个字节来完全表示
3.要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码

  • 字符集和编码的发展

这里写图片描述
具体常见的字符集和编码的区别,可以参考文章结尾的参考资料。

小结

字符编码就是将符号转换为计算机可以接受的数字系统的数(数字代码),根据不同字符集的编码规则将数字代码转换为字符。字符编码的过程就是字符和数据代码根据对应的编码规则相互转换的过程。

参考资料:

1.字和字节和位的关系
2.字符,字节和编码
3.字符编码笔记:ASCII,Unicode和UTF-8
4.The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
5.几种常见的编码格式
6.【字符编码】彻底理解字符编码
7. 帮你理清Java中字符与字节的编码关系
8.字符集和字符编码(Charset & Encoding)
9.字符和编码
10.Unicode 和 UTF-8 有何区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值