• python bytearray/bytes/string区别(47)


     

     

     

    一.字节与字符的区别

        在讲解 bytearray / bytes / string 三者的区别之前,有必要来了解一下字节和字符的区别:

    1.字节概念

        字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数;

        位(bit)是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数;

        字节(byte)是计算机中 数据处理 的基本单位,习惯上用大写  B  来表示,1B(byte,字节)= 8bit(位);

    1 KB = 1024 B(字节);
    1 MB = 1024 KB;  (2^10 B)
    1 GB = 1024 MB;  (2^20 B)
    1 TB = 1024 GB;  (2^30 B)

     

     

    2.字符概念

        字符 是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等;

        一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;

        一般 gbk 编码下,一个汉字 字符 占用 2 个 字节;

     

    3.字符串概念

        字符串是字符序列,它是一种抽象的概念,不能直接存储在硬盘 – 字节串是给计算机看的,给计算机传输或者保存的,在Python中,程序中的文本都用字符串表示;

     

    4.字节串概念

        字节串是字节序列,它可以直接存储在硬盘, 字节串是给计算机看的。它们之间的映射被称为编码/解码 – 字符串是给人看的,用来操作的;

    # !usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    @Author:何以解忧
    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Github:www.github.com
     
    @File:python_bytes_string_2.py
    @Time:2020/2/29 21:25
     
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    """
     
     
    if __name__ == "__main__":
     
        # 字符串str 转 字节bytes
        s = '猿说python'
        b = s.encode()  # 编码,默认的是UTF-8
        print(b)
        print(type(b))
     
        # 字节bytes 转 字符串str
        b = b'xe7x8cxbfxe8xafxb4python'.decode(encoding='UTF-8')  # 解码
        print(b)
        print(type(b))

    输出结果:

    b'xe7x8cxbfxe8xafxb4python'
    <class 'bytes'>
    猿说python
    <class 'str'>

     

     

     

    二.str、bytes和bytearray区别

        1.str是字符数据(如:文本,给人看的),bytes和bytearray是字节数据(如:二进制数据,给计算机看的),它们都是序列,可以进行迭代遍历。

        2.str和bytes是不可变序列,通过str类型的通用函数,比如find()、replace()、islower()等函数修改后实际上是重新创建了新对象;bytearray是可变序列,可以原处修改字节。

        3.bytes和bytearray都能使用str类型的通用函数,比如find()、replace()、islower()等,不能用的是str的格式化操作。

        4.python 3.x中默认str是unicode格式编码的,例如UTF-8字符集。

     

    三.string与bytes/bytearray相互转换

    1.string经过编码encode转化成bytes

    if __name__ == "__main__":
        s = "shuopython.com"
        # 将字符串转换为字节对象
        b2 = bytes(s, encoding='utf8')  # 必须制定编码格式
        # print(b2)
     
        # 字符串encode将获得一个bytes对象
        b3 = str.encode(s)
        b4 = s.encode()
        print(b3)
        print(type(b3))
        print(b4)
        print(type(b4))

    输出结果:

    b'shuopython.com'
    <class 'bytes'>
    b'shuopython.com'
    <class 'bytes'>

     

     

    2.bytes经过解码decode转化成string

    if __name__ == "__main__":
        # 字节对象b
        b = bytes("python教程-猿说python","utf-8")
     
        #方案一:
        s2 = bytes.decode(b)
        # 方案二:
        s3 = b.decode()
        
        print(s2)
        print(s3)

    输出结果:

    注意:如果bytes初始化含有中文的字符串必须设置编码格式,否则报错:TypeError: string argument without an encoding

    b = bytes("猿说python")
     
    >>> b = bytes("猿说python")
    >>> TypeError: string argument without an encoding

     

     

    猜你喜欢:

         1.python bytes

         2.python 可变数据类型和不可变数据类型

         3.python bytes和string相互转换

     

        转载请注明:猿说Python » python bytearray/bytes/string区别

     

    技术交流、商务合作请直接联系博主
    扫码或搜索:猿说python
    python教程公众号
    猿说python
    微信公众号 扫一扫关注
  • 相关阅读:
    Alpha冲刺
    Alpha冲刺
    抽奖系统(记一次未完成的教训)
    Alpha冲刺
    软件工程
    软工实践
    软工实践
    软工实践
    软工实践
    软工实践
  • 原文地址:https://www.cnblogs.com/shuopython/p/12419086.html
Copyright © 2020-2023  润新知