Chuyển đổi giá trị 0 - 4095 (12 bit) sang bytes trong python

Em chào mọi người, như tiêu đề em có một thắc mắc là trong python làm cách nào chuyển đổi giá trị 12bit (0-> 4095) sang bytes để lưu vào file ạ. Em thấy đa phần có kiểu dữ liệu 8bit 16bit 32bit đổi sang bytes để lưu vào file, mà do 8bit thì ít quá không đủ để lưu trữ, còn 16bit trở lên thì lớn quá việc này sẽ tốn bộ nhớ ạ.

Lưu từng cặp 2 số nhé. Mỗi cặp số như thế là 24 bit. Chuyển 24 bit đó thành 3 bytes.

3 Likes

Dạ, a giải thích kỹ hơn dc ko, em chưa hiểu cho lắm ạ. tại gia trị trừ 0 đến 4095 có thể lưu được ở dang 16bit và chuyển nó thành 2byte, nhưng do phải tiết kiệm bộ nhớ nên chỉ dùng 12bit để chuyển thôi ạ.

Mỗi số là 12 bit, ghép 2 số kề nhau là 24 bit.

Ví dụ:

a = 98 = 0b1100010 = 0000 0110 0010
b = 59 = 0b111011 = 0000 0011 1011

Ghép lại thành

ab = 98|59 = 0000 0110 0010|0000 0011 1011 = 401467 (đảm bảo đủ 24 bit = 3 byte)

  • Ghép như thế nào?

    ab = (a << 12) + b

  • Lấy ra 2 số thế nào?

    • số bên trái = (ab >> 12) = 98
    • số bên phải = ab & ((1 << 12) - 1) = 59
2 Likes

Dạ. Em cảm ơn anh nhiều ạ.

16 bit lưu đúng là lớn nhưng nó xử lý nhẹ nhàng (tức là chạy nhanh) hơn gộp 2 số thành 24 bit.
Vậy nên cân nhắc là hy sinh hiệu suất phần mềm hay không gian lưu trữ.

3 Likes

Dạ đúng rồi ạ. Em làm cũng thấy nó chậm hơn, tại em đang xử lý bài toán nén dữ liệu nên ưu tiên không gian lưu trữ hơn. Cảm a đã đóng góp ý kiến ạ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?