Cơ sở 80 ?? Tại sao 80? Nó không có ý nghĩa, tuy nhiên cơ sở 85 thì có. Điều này khá thuận tiện khi bạn có thể biểu thị 4 byte bằng 5 ký tự (vì 85 ^ 5 = 4,437,053,125, hơi nhiều hơn 2 ^ 32 = 4,294,967,296)
Đây là mã của tôi để viết một 32-bit duy nhất word
:
for (i=0; i<5; i++)
{
c = (word % 85) + 37;
word /= 85;
fwrite(&c, sizeof(uint8_t), 1, file);
}
và đây là để đọc lại:
word = 0;
for (i=4; i>=0; i--)
fread(&c[i], sizeof(uint8_t), 1, file);
for (i=0; i<5; i++)
word = word*85 + c[i]-37;
Nếu bạn thực sự muốn sử dụng cơ sở 80, bạn có thể sử dụng cùng một cách tiếp cận và thay thế các thể hiện của 85 bằng 80 và bạn sẽ cần 6 ký tự cho mỗi 4 byte thay vì 5.
Làm thế nào nó sẽ nén bất cứ điều gì mặc dù? Bạn có nhận ra rằng các tập tin được viết trong cơ sở 256, phải không? Điều này được nói rằng nếu bạn nén một tệp được viết trong cơ sở 85 thì nó sẽ có cùng kích thước với tệp cơ sở 256 đã được nén, làm cho cơ sở 85 (hoặc cơ sở 64) trở thành một lựa chọn tốt nếu bạn muốn biểu thị dữ liệu nhị phân bằng các ký tự có thể in được.