Làm sao để lưu số 0 1 dưới dạng bits

mình có chuỗi 4 ký tự abcd,khi lưu vào văn bản thì sẽ tốn 4*8 bits,nhưng sau khi mình mã hóa được thì được chuỗi 1010011001 vậy làm sao để lưu vào văn bản dưới dạng mỗi 1 số 0 or 1 chỉ tốn 1 bits

1 Like

Phải lưu dưới dạng byte :wink:

nhưng mình đang học nén file văn bản mà,nén mà ra file to hơn thì chết

Ý mình là lưu mỗi 8 bit đó thành 1 byte. Chẳng hạn

void writeEncode(FILE *f_out, string code, int &n_bit, unsigned char &byte){
	for (int i = 0; i < code.length(); i++) {
		byte = byte << 1;
		byte = byte | (unsigned char)(code[i] - 48);
		n_bit++;
		if (n_bit == 8){
			fwrite(&byte, sizeof(unsigned char), 1, f_out);
			byte = 0;
			n_bit = 0;
		}
	}
}

Bài của tớ nên không share được nhiều hí hí :blush:

1 Like

giải thích giúp mình được không phong?

Giờ mình bận rồi bạn lên Gr này hỏi sẽ có nhiều câu trả lời hơn đấy :wink: https://www.facebook.com/groups/768122753246300/

1 Like

Bạn chỉ có thể lưu dữ liệu trong máy tính với đơn vị nhỏ nhất là Byte. Vì không có kiểu dữ liệu nào “nhỏ hơn” 1 Byte cả.

Mình đọc mấy lần vẫn không hiểu ý của @Htc nhỉ. Bạn mã hóa thành chuỗi 1010011001 như thế nào?

1 Like

Em nghĩ nếu chỉ mã hoá những kí tự trong 26 chữ cái thường, thì có thể mã hoá 1 kí tự với tối đa 5 bits.
Cụ thể:

a = 1 = 00001
.
.
.
.
z = 26 =  11010

Vậy còn các ký tự hoa và các ký tự khác nữa thì sao?

mình nén huffman được bảng mã sau a:11 b:10 c:01 (ví dụ thế) thì đoạn abc của mình sẽ là 111001.nếu lưu dưới dạng bình thường thì sẽ là 68 bits(111001) >38 bits(abc)

Có thể @Htc đang cần cái này

1 Like

ủng hộ bạn nhiệt tình làm video về cái này

@Htc có thắc mắc gì về tài liệu đó không?

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