سطح مقدماتی (Beginner Level)
در پایتون، دادههای متنی با str ذخیره میشوند، اما کامپیوترها در نهایت با بایتها (اعداد ۰ تا ۲۵۵) کار میکنند. برای کار با فایلهای تصویری، شبکه، یا رمزنگاری، باید تفاوت بین متن (Text) و دادههای باینری (Binary Data) را درک کنیم.
۱. تفاوت String و Bytes
رشتهها (Strings) توالیای از کاراکترهای یونیکد هستند، در حالی که بایتها (Bytes) توالیای از اعداد ۸ بیتی هستند.
- String:
'سلام'(برای انسان قابل خواندن است) - Bytes:
b'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'(آنچه در حافظه ذخیره میشود)
# Static: Syntax definition
# Prefixing with 'b' creates a bytes object instantly
my_bytes = b"This is static content"
۲. تبدیل متن به بایت (Encode و Decode)
این یکی از مهمترین مفاهیم است. برای تبدیل متن به بایت از encode و برای تبدیل بایت به متن از decode استفاده میکنیم.
۳. تابع bytes()
میتوانید با استفاده از تابع سازنده bytes()، لیستهایی از اعداد صحیح را به بایت تبدیل کنید. اعداد باید بین ۰ تا ۲۵۵ باشند.
سطح پیشرفته (Professional Level)
در سطح حرفهای، بحث تغییرپذیری (Mutability) و کارایی حافظه مطرح میشود. نوع داده bytes تغییرناپذیر (Immutable) است، مشابه تاپلها. اما bytearray نسخه تغییرپذیر (Mutable) آن است.
۱. نوع داده bytearray
اگر نیاز دارید دادههای باینری را در جای خود تغییر دهید (مثلاً تغییر پیکسلهای یک عکس یا بافر شبکه) بدون اینکه کپی جدیدی در حافظه ایجاد کنید، از bytearray استفاده کنید.
# Static: Structure of bytearray usage
def process_buffer(buffer):
if isinstance(buffer, bytearray):
buffer[0] = 0x00 # Reset header
۲. کارایی با memoryview
شیء memoryview به شما اجازه میدهد به بافر داخلی یک شیء (مثل bytes یا bytearray) بدون کپی کردن آن دسترسی داشته باشید. این برای پردازش فایلهای حجیم حیاتی است.
۳. تبدیل اعداد به بایت (Byte Ordering)
در برنامهنویسی سطح پایین و شبکه، ترتیب بایتها (Endianness) مهم است (Big Endian vs Little Endian). متدهای from_bytes و to_bytes در نوع داده int برای این کار استفاده میشوند.
۴. متد hex() و fromhex()
برای نمایش دادههای باینری به صورت رشتههای هگزادسیمال (که در دیباگینگ بسیار رایج است).