Python

Python 位元組序列 bytes 使用教學與範例

介紹 Python 的位元組(bytes)函數的使用方式,並提供幾種常用的範例程式碼。

Python 的位元組(bytes)物件就是一串不可修改的序列,每個元素值都介於 0255,若要將其他的物件轉換為位元組物件,可以使用 bytes 函數,以下是 bytes 函數的使用方式與範例。

如果需要可以修改的位元組陣列,可以改用 bytearray 函數。

建立位元組

若在呼叫 bytes 時只傳入一個整數值 n,則會建立長度為 n,並且由 null 字元組成的位元組序列:

# 建立長度為 5 的位元組
bytes(5)
b'\x00\x00\x00\x00\x00'

若傳入一個 list,則可直接轉為位元組序列:

# 將 list 轉為位元組
bytes([1, 2, 3, 4])
b'\x01\x02\x03\x04'

亦可將字串以指定的編碼方式,轉換為位元組序列:

# 將字串以 UTF-8 編碼轉為位元組
bytes("python", "utf-8")
b'python'
# 將字串以 UTF-16 編碼轉為位元組
bytes("python", "utf-16")
b'\xff\xfep\x00y\x00t\x00h\x00o\x00n\x00'

對於簡單的資料,亦可用字串實字直接建立位元組序列:

# 以字串實字建立位元組序列
b'\x01\x02\x03\x04'
b'\x01\x02\x03\x04'

位元組索引

若要取用位元組序列中的元素,可以使用索引:

# 建立位元組序列
b = b"\x01\x02\x03\x04"

# 取用第一個元素
b[0]
1

迴圈處理位元組序列

我們也可以用 for 迴圈來逐一處理位元組的每個元素:

# 建立位元組序列
b = b"\x01\x02\x03\x04"

# 以迴圈逐一處理位元組序列的元素
for x in b:
    print(x)
1
2
3
4

字串與位元組轉換

若要將位元組序列轉換為普通的字串,可以使用 str 函數:

# 建立位元組序列
b = b"python"

# 位元組序列轉為字串
str(b, encoding = "UTF-8")
'python'

另外亦可使用 bytesdecode 函數,寫法不同但作用都相同:

# 位元組序列轉為字串
bytes.decode(b, encoding = "utf-8")

# 位元組序列轉為字串
b.decode(encoding = "utf-8")

若要將普通的字串轉換為位元組序列,則可使用 bytes 函數:

# 字串
s = "python"

# 字串轉為位元組序列
bytes(s, encoding = "utf8")
b'python'

另外亦可使用 strdecode 函數:

# 字串轉為位元組序列
str.encode(s, encoding = "utf-8")

# 字串轉為位元組序列
s.encode(encoding = "utf-8")

數值陣列與位元組轉換

位元組序列可以透過 list 轉換為普通的列表(list):

# 建立位元組序列
b = b"\x01\x02\x03\x04"

# 轉為列表(list)
list(b)
[1, 2, 3, 4]

若要轉為 NumPy 的陣列,可以先轉為 bytearray 之後,再轉為 NumPy 陣列:

import numpy as np

# 位元組序列轉為 NumPy 陣列
np.array(bytearray(b))
array([1, 2, 3, 4], dtype=uint8)

參考資料:ProgramizBeginnersBookAppDividend

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago