目标:了解计算机中一些必备的尝试知识,了解常见名词背后的意义
计算机中底层的所有数据都是0101010101的形式存在的
八进制无法直接转为2进制
bin(25) # 10进制转为2进制
oct(25) # 10进制转为8进制
hex(25) # 10 进制转为16 进制
输出的结果都是字符串类型的结果
int('0b11001', base=2) 2进制转为10进制
int('0o31', base=8) 8进制转为10进制
int('0x19', base=16) 16进制转为10进制
由于计算机中本质上所有的东西都是二进制进行存储和操作的,所以产生了计算机的单位。
1,1位
10,2位
111,3位
1001,4位
8位数是一个字节
10001000,1个字节
10001000 10001000 2个字节
1024个字节=1千字节
1kb=1024B=1024*8b
1024KB = 1M = 1024*1024 B 1024*1024*8 b
G(Gigbyte),千兆
1G = 1024 M =1024*1024KB = 1024*1024*1024 B = 1024*1024*1024*8 b
1T = 1024G
编码,文字和二进制之间的一个对照表
gb-2312编码,由国家信息标准委员会制作(1980年)
gbk 编码,对gb2312进行扩展,包含了中日韩等文字(1995年)。
在与二进制做对应关系时,由如下逻辑:
Unicode 也被称为万国码,为全球的每个文字都分配了一个码位
用固定的2个字节表示一个文字
用固定的4个字节表示一个文字
无论是ucs2和ucs4都有一个问题就是浪费空间
文字 十六进制 二进制
冯 51AF 101000110101111
冯 51AF 01010001 10101111 ucs2
冯 51AF 00000000 00000000 01010001 10101111 ucs4
unicode的应用:在文件存储和网络传输时,不会直接使用Unicode,而在内存中会使用Unicode的
包含所有的文字和二进制的对应关系,全球应用范围最为广泛的一种编码形式(站在巨人肩膀上工程名就)
本质上:utf-8是对Unicode编码的压缩,用尽量少的二进制与文字进行对应
Unicode码范围 UTF-8
0000 - 007F 用一个字节表示
0080 - 07FF 用两个字节表示
0800 - FFFF 用三个字节表示
10000 - 10FFFF 用四个字节表示
压缩流程
码位范围(16进制) 转换模版
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxxx 10xxxxxx
10000 - 10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
注意:一般中文都使用第三个模版(三个字节),这也就是大家说中文在UTF-8中会占三个字节的原因了
冯 -》51AF-》101 000110 101111
根据模版去套入数据
1110xxxx 10xxxxxxx 10101111
1110xxxx 10000110 10101111
11100101 10000110 10101111
在utf-8 编码中"武"的编码为 11100101 10000110 10101111
字符串(srt) "yujinlong" unicode 一般用于内存
字节(byte) utf-8 or gbk 一般用于文件和网络
text = 'yuijnlong2002'
data = text.encode('utf-8')
# 打开一个文件
file = open('yujinlong.txt', mode='wb')
# 写入字符串
file.write(data)
# 关闭文件
file.close()