Bytearray function trong Python
Bytearray function trong Python

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)
Last modified: September 20, 2023

Author

Comments

Write a Reply or Comment

Your email address will not be published.