Tôi đang cố triển khai thuật toán huffman để nén, đòi hỏi phải viết các bit có độ dài biến đổi cho một tệp. Có cách nào trong C++ để ghi dữ liệu độ dài biến đổi với độ chi tiết 1 bit cho một tệp không?mã hóa huffman
Trả lời
Không, lượng dữ liệu nhỏ nhất bạn có thể ghi vào một tệp là một byte.
Bạn có thể sử dụng bitset để thao tác bit dễ dàng hơn, sau đó sử dụng ofstream để ghi vào tệp. Nếu bạn không muốn sử dụng bitet, bạn có thể sử dụng bitwise operators để thao tác dữ liệu của mình trước khi lưu.
Số bit nhỏ nhất bạn có thể truy cập và lưu là 8 = 1 byte. Bạn có thể truy cập bit bằng byte sử dụng toán tử bit^& |.
Bạn có thể thiết lập bit n'th tới 1 sử dụng:
my_byte = my_byte | (1 << n);
trong đó n là từ 0 đến 7.
Bạn có thể thiết lập bit n'th 0 sử dụng:
my_byte = my_byte & ((~1) << n);
Bạn có thể chuyển đổi bit n'th bằng cách sử dụng:
my_byte = my_byte^(1 << n);
Chi tiết khác here.
Câu trả lời của klew có lẽ là câu trả lời bạn muốn, nhưng chỉ để thêm vào thứ mà Bill cho biết, thư viện Boost có số dynamic_bitset mà tôi thấy hữu ích trong một tình huống tương tự.
No. Bạn sẽ phải đóng gói byte. Theo đó, bạn sẽ cần một tiêu đề trong tệp của bạn xác định có bao nhiêu phần tử trong tệp của bạn, bởi vì bạn có khả năng có các bit cuối không được sử dụng.
Tất cả thông tin bạn cần về chút twiddling là ở đây:
How do you set, clear, and toggle a single bit?
Nhưng đối tượng nhỏ nhất mà bạn có thể đưa vào một tập tin là một byte.
Tôi sẽ sử dụng dynamic_bitset và mỗi khi kích thước lớn hơn 8 trích xuất 8 bit dưới cùng thành một char và ghi nó vào một tệp, sau đó chuyển các bit còn lại xuống 8 vị trí (lặp lại).
- 1. Giải mã một khối JPEG Huffman (bảng)
- 2. Kỹ thuật mã hóa Jpeg
- 3. Làm thế nào để giải mã mã huffman một cách nhanh chóng?
- 4. Mã hóa mã hóa trong TWIG
- 5. Mã hóa/giải mã base64
- 6. Mã hóa/giải mã RSA
- 7. Mã hóa/mã hóa ID trong chuỗi URL
- 8. Chế độ mã hóa mã hóa và xác thực
- 9. Sự khác nhau giữa mã hóa và mã hóa
- 10. phương pháp mã hóa PHP đúng mã hóa PHP?
- 11. Huffman Tree với tần số cho nhầm lẫn như thế nào để bắt đầu? Java
- 12. Mã hóa URL ASP.Net
- 13. Sửa mã hóa PDF
- 14. Mã hóa CLLocationcoordinate2D
- 15. Mã hóa WebConfig
- 16. Mã hóa thủy tinh
- 17. Thư viện mã hóa?
- 18. Mã hóa Rsync
- 19. Phát hiện mã hóa
- 20. mã hóa XmlWriter
- 21. Mã hóa bằng rijndael
- 22. phần để mã hóa
- 23. Android GCM mã hóa
- 24. Mã hóa SQL & Coldfusion
- 25. Mã hóa XML CDATA
- 26. asp.net mã hóa ViewState
- 27. Mã hóa JSON Python
- 28. Mã hóa menu DVD
- 29. Mã hóa window.location.hash
- 30. Mã hóa cách Python
bạn không cần phải tính số lượng phần tử của tệp là ký tự đặc biệt eof có thể phù hợp với hóa đơn –