ในบทช่วยสอนนี้ เราจะเรียนรู้เกี่ยวกับโมดูล struct มาดูรายละเอียด
โมดูล struct ใช้แปลงชนิดข้อมูลพื้นฐานของ Python เป็น สตริงของไบต์ (bytes) และกลับกัน ไม่ต้องติดตั้ง เพราะเป็น built-in module ใน Python 3
โมดูล struct เกี่ยวข้องกับภาษา C เราต้องรู้สัญลักษณ์ที่ใช้ใน C แทนชนิดข้อมูลต่างๆ เพื่อทำงานกับ struct module ลองดูบางตัว
| ชนิดข้อมูล | Format Character |
|---|---|
| int | i |
| char | c |
| string | s |
| float | f |
ลองดูวิธีแปลงชนิดข้อมูล Python เป็น bytes
struct.pack()
เมธอด struct.pack() ใช้แปลงชนิดข้อมูลเป็น bytes รับอาร์กิวเมนต์หลายตัว ตาม format string ตัวแรก
เราต้องส่ง format string พร้อม format characters ตามตารางข้างต้น ส่งอาร์กิวเมนต์ได้เท่าไหร่ก็ได้ ตัวอย่าง:
- struct.pack('14s i', b'Tutorialspoint', 2020)
- struct.pack('i i f 3s', 1, 2, 3.5, b'abc')
ลองแปลงตัวอย่างข้างต้นเป็น bytes
ตัวอย่าง
# นำเข้าโมดูล struct
import struct
# แปลงเป็น bytes
print(struct.pack('14s i', b'Tutorialspoint', 2020))
print(struct.pack('i i f 3s', 1, 2, 3.5, b'abc'))
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้
b'Tutorialspoint\x00\x00\xe4\x07\x00\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00`@abc'
struct.unpack()
มีอีกเมธอดคือ struct.unpack() แปลง bytes กลับเป็นชนิดข้อมูล Python รับ 2 อาร์กิวเมนต์ ตัวแรกเหมือน pack() ตัวที่สองคือผลลัพธ์จาก struct.pack()
เมธอด struct.unpack() คืนค่าเป็น tuple เสมอ
ตัวอย่าง
# นำเข้าโมดูล struct
import struct
# แปลงเป็น bytes
converted_bytes = struct.pack('14s i', b'Tutorialspoint', 2020)
# แปลงกลับเป็นชนิดข้อมูล Python
print(struct.unpack('14s i', converted_bytes))
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้
(b'Tutorialspoint', 2020)
สรุป
struct ใช้ pack/unpack แปลงข้อมูล Python <-> bytes สำหรับ binary data หากมีข้อสงสัย กรุณาแจ้งในส่วนความคิดเห็น