bytesarray的定義
bytesarray沒有像bytes的b’'的快捷方式,只能用bytesarrary()
>>> bytearray() # 可變的數組
bytearray(b'')
>>> b10 = bytearray(b"")
>>> b10
bytearray(b'')
>>> bytearray("abc".encode()) #一般很少用這個
bytearray(b'abc')
>>> bytearray('abc','gbk')
bytearray(b'abc')
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00')
>>> bytearray(range(65,70))
# 所以,當如果你想對一個bytes進行修改,可以先用bytearray包一下
bytearray(b'ABCDE')
>>> a= bytearray.fromhex('656667')
>>> a
bytearray(b'efg')
>>> a.hex()
'656667'
>>> for x in a:
>>> print(type(x),x)
<class 'int'> 101
<class 'int'> 102
<class 'int'> 103
>>> a[0] = b's' #這樣會報錯,因爲a[0]要求是整數類型
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-104b99f818a9> in <module>
----> 1 a[0] = b's' #這樣會報錯,因爲a[0]要求是整數類型
TypeError: 'bytes' object cannot be interpreted as an integer
>>> a[0] = 99
>>> a
>>> for x in a:
>>> print(type(x),x, hex(x))
bytearray的方法
>>> a
>>> a.insert(0,100)
>>> a
>>> a.append(101)
>>> a
>>> a.extend(b'abc') #雖然extend可以這樣用,但我們一般不
>>> a
>>> a.extend(range(120,123))
>>> a
>>> a.find(b"xya") # 這個方法有點像字符串
>>> a.remove(120)
>>> a
>>> a.pop()
>>> a
>>> a.reverse()
>>> a
字節序
- 字符串採用了大端模式Big endian,尾巴字符往高地址放
- int類型,以c語言爲例子
-
1字節,無所謂大小端
-
2字節,尾巴放在低地址端,就是小端模式,LSB:Least Significant Bit(最低有效位);尾巴放在大地址端,就是大端模式,MSB:Most Significant Bit(最高有效位)。
-
大端模式, big-endian;小端模式, little-endian
-
Intel X86 CPU使用小端模式
-
網絡傳輸更多使用大端模式
-
Windows, Linux使用小端模式
-
Mac OS使用大端模式
-
ava A機端模式
>>> a = 0x616263 # 定義的整型,61是高字節,在低地址;63是低字節,在高地址
>>> type(a),hex(a),a # 16進製表達的 ,不是字符串
如何把整形變成bytes字節序列,即把0x616263,變成b"\x616263"?
如下:
>>> a.to_bytes(3,"big") # int->byte
計算機內部,int和byte是可以直接轉的,如果要轉到字符串,就需要間接的轉化:
>>> a.to_bytes(3,"big").decode() # int->byte ->decode() str
- PS: 在內存中是無差別的0和1,當你賦予了數據類型之後,計算機才能理解0和1是什麼;
- 如何你定義爲字符串,那計算機就當字符串看,那就與編碼表有關;如果你定義爲整型那就會當做整型,那你就要提供是幾個字節,以及字節序;
用16進制字符串獲得bytes
>>> int.from_bytes(b'abc',"big") # bytes-> int
>>> hex(int.from_bytes(b'abc',"big")) #轉化成16進制
也可這樣轉:
>>> b = bytearray()
>>> b.append(0x61)
>>> b
>>> b.extend(b'bc')
>>> b
>>> int.from_bytes(b,'big')
>>> hex(int.from_bytes(b,'big'))