30/09/2018, 22:36

Nếu bạn trả lời được câu hỏi này. Bạn đúng là PRO C++!

TRONG CHƯƠNG TRÌNH DƯỚI ĐÂY

  • Tại sao ta có thể mở và xem nội dung của tập tin nhị phân một cách bình thường giống như tập tin văn bản. Đáng lẽ ra ta không thể nhìn thấy được nội dung của file nhị phân này ? Hãy cho biết TẠI SAO ?

http://codepad.org/OwX99H0p

1.Nhập một chuỗi str -> char arr1 [] -> FILEOUT.DAT
2.FILEOUT.DAT -> char arr2 [] -> màn hình in

Liệu chương trình này có đúng ?

Tao Không Ngu. viết 00:39 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Quân viết 00:43 ngày 01/10/2018

chẳng có gì là thần bí ở đây cả, như bạn @Phong_Ky_Vo đã nói, file văn bản cũng chỉ là file nhị phân, nhưng file nhị phân chưa chắc đã là file văn bản có nghĩa, mình xin nhấn mạnh từ có nghĩa vì mọi file đều có thể đọc dưới dạng file văn bản hoặc nhị phân. bản chất việc ghi kí tự xuống file văn bản là việc ghi mã code của kí tự đó trong bảng mã xuống file. Việc đọc lại file văn bản chính là dịch ngược mã code sang kí tự được mapping trong bảng mã.
Quay trở lại ví dụ của bạn:

void NhapMang(char *&arr, string str , int &n)
{
	n = str.length();
	arr = new char[n];
	for (int i = 0; i < n;i++)
	{
		arr[i] = str[i];
	}
}

ở hàm này bạn chỉ đơn giản copy từng char từ string sang array.

void GhiFile(ofstream &FileOut, char *arr, int n)
{
	FileOut.open("OUTPUT.DAT", ios::out | ios::binary);

	FileOut.write(arr, n*sizeof(char));

	FileOut.close();
}

ở hàm này bạn sẽ ghi 1 block memory mà bạn đã copy từ hàm nhập xuống file, việc này cũng không khác gì so với cách mà thủ tục ghi file theo mode text đã làm, khi đó bạn dùng các texteditor để xem lại thì xem được nội dung file là bình thường.

Babu Tri Tran viết 00:50 ngày 01/10/2018

1 vấn đề nữa là khi bạn đổi arr thành kiểu int và bạn nhập str toàn là số thì lúc đó file nhị phân khi mỡ ra nó sẽ hiện những ký tự hk đọc được ?. vậy tại sao khi mảng ký tự thì mở xem được còn mang int thì mở không xem được ?

Quân viết 00:40 ngày 01/10/2018

khi bạn để là mảng int thì kiểu int có độ rộng là 4 byte, trong khi char chỉ có 1 byte, do đó khi ghi dạng int xuống thì sẽ có rất nhiều byte trống xen kẽ với byte thực sự có dữ liệu, hơn nữa giá trị mà 1 biến int nhận được có thể lớn hơn rất nhiều so với 1 biến char, những phần chênh lệch đó có thể được mapping ra vô số kí tự hầm bà lằng

Văn Dương viết 00:41 ngày 01/10/2018

Khiếp quá ! Bão về thớt giật title kinh hồn. Đều là kiến thức cơ bản phải học trước lúc lập trình mà ?

Babu Tri Tran viết 00:44 ngày 01/10/2018

Cám ơn banh rất nhiều á. Giờ mình đã hiểu rồi. ^^

Babu Tri Tran viết 00:51 ngày 01/10/2018

)) Nếu biết thì giải đáp giùm mình đi mà.

Bài liên quan
0