Trong Python, bytes
và bytearray
là hai kiểu dữ liệu để lưu trữ dữ liệu nhị phân. bytes
là một đối tượng bất biến (immutable) và không thể thay đổi, trong khi bytearray
là một đối tượng có thể thay đổi (mutable).
Bytearray()
cho phép bạn tạo và thay đổi các mảng byte, điều này rất hữu ích khi làm việc với dữ liệu nhị phân, như đọc và ghi dữ liệu từ các tệp nhị phân, giao tiếp với các thiết bị phần cứng hoặc xử lý các giao thức mạng.
# Syntax: bytearray(x, encoding, error)
# Chuyển đổi số integer về bytearray
x = bytearray(4)
print(x) # Kết quả sẽ là: bytearray(b'\x00\x00\x00\x00')
# Chuyển một list về bytearray
prime_numbers = [2, 3, 5, 7]
byte_array = bytearray(prime_numbers)
print(byte_array) Kết quả sẽ là: bytearray(b'\x02\x03\x05\x07')
# Chuyển đổi string với encode Utf-8
string = "Python is interesting."
arr = bytearray(string, 'utf-8')
print(arr) # Kết quả sẽ là bytearray(b'Python is interesting.')
Khi làm việc với mã hóa và giải mã, bytearray()
cung cấp một cách tiện lợi để làm việc với dữ liệu byte. Bạn có thể sử dụng bytearray()
để tạo và chỉnh sửa các mảng byte khi thực hiện các phương thức mã hóa như Base64, hex, hoặc các thuật toán mã hóa đối xứng và không đối xứng khác.
Khi làm việc với các chuỗi mã hóa, bytearray()
có thể được sử dụng để chuyển đổi giữa các chuỗi và mã byte tương ứng. Điều này rất hữu ích khi bạn cần thực hiện các phép biến đổi mã hóa như UTF-8, ASCII, Unicode và các mã hóa khác.
Trong một số trường hợp, việc sử dụng bytearray()
có thể tăng hiệu suất so với việc sử dụng các kiểu dữ liệu chuỗi khác trong Python. Điều này đặc biệt đúng khi bạn cần thay đổi nội dung của một mảng byte thay vì tạo một bản sao mới mỗi lần thay đổi.
Sau đây là một ví dụ về chuyển đổi độ sáng của một hình ảnh
def adjust_brightness(image_data, brightness):
# Đọc dữ liệu hình ảnh thành một mảng bytearray
image_bytes = bytearray(image_data)
# Điều chỉnh độ sáng của từng pixel trong mảng bytearray
for i in range(0, len(image_bytes), 3):
# Lấy giá trị R, G, B của pixel hiện tại
r = image_bytes[i]
g = image_bytes[i+1]
b = image_bytes[i+2]
# Thay đổi độ sáng bằng cách áp dụng một hệ số
r = min(int(r * brightness), 255)
g = min(int(g * brightness), 255)
b = min(int(b * brightness), 255)
# Gán lại giá trị R, G, B mới cho pixel
image_bytes[i] = r
image_bytes[i+1] = g
image_bytes[i+2] = b
# Trả về mảng bytearray đã chỉnh sửa
return bytes(image_bytes)
Sử dụng bytearray()
để xây dựng một gói tin mạng:
def build_network_packet(source_ip, destination_ip, payload):
# Tạo một mảng bytearray mới để lưu trữ gói tin
packet = bytearray()
# Thêm địa chỉ IP nguồn vào gói tin
packet.extend(source_ip)
# Thêm địa chỉ IP đích vào gói tin
packet.extend(destination_ip)
# Thêm payload (dữ liệu) vào gói tin
packet.extend(payload)
return packet
Làm mờ âm thanh bằng cách áp dụng một bộ lọc trung bình đơn giản.
def apply_audio_filter(audio_data, window_size):
# Tạo một mảng bytearray mới từ dữ liệu âm thanh
audio_bytes = bytearray(audio_data)
# Số lượng mẫu âm thanh trong một khung (window)
samples_per_frame = 2 # Giả sử âm thanh được lưu trữ dưới dạng âm thanh stereo (2 kênh)
# Áp dụng bộ lọc trung bình đơn giản
for i in range(window_size * samples_per_frame, len(audio_bytes), samples_per_frame):
# Tính giá trị trung bình của các mẫu âm thanh trong khung
avg_value = sum(audio_bytes[i - window_size * samples_per_frame:i:samples_per_frame]) // window_size
# Áp dụng giá trị trung bình cho tất cả các mẫu âm thanh trong khung
for j in range(i - window_size * samples_per_frame, i, samples_per_frame):
audio_bytes[j] = avg_value
return bytes(audio_bytes)
Comments