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ớ ạ.
Chuyển đổi giá trị 0 - 4095 (12 bit) sang bytes trong python
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.
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
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ữ.
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 ạ.