-
不要使用 cstring,cstring 的字元長度未知,因此讀寫困難。 您可以看到 sizeof(game) 的值是多少。
讓我們只使用乙個 char 型別的陣列。
-
除錯除錯以檢視錯誤所在。
cfile file;,cfile::typebinary|cfile::moderead|cfile::
sharedenynone|cfile::modenotruncate|cfile::modecreate);
game g;
sizeof(game));
cstring temp;
temp=;
messagebox(temp);
sizeof(game));
出書是錯誤的價值觀。
建議你看一下物件的永續性。
-
在 C 語言中讀取二進位檔案是使用 fread 和 fwrite 完成的。
fwrite() 與 fprintf() 不同。
fwrite 將寫入的資料儲存為檔案的磁碟內容。 fprintf 將寫入資料的每個字元的 ASCII 程式碼儲存為檔案的磁碟內容。 fprintf 做了乙個轉換工作。
當乙個檔案被開啟時,記事本會自動將檔案的磁碟內容轉換為相應的字元作為ASCII碼,然後顯示它,即顯示的是文字內容而不是磁碟內容。
例如,如果使用 fwrite 將“65”寫入檔案,則該檔案的磁碟內容是儲存的 65(在磁碟上表示為二進位檔案)。 使用記事本開啟檔案時,記事本讀取 65 並將 65 視為 ASCII 程式碼,並顯示相應的字元“A”。 因此,螢幕上看到的文字內容為“a”。
使用 fprintf 將 65 寫入檔案時,字元 6 和 5 對應的 ASCII 程式碼儲存在檔案的磁碟內容中,分別為 54 和 53。 因此,檔案的磁碟內容為 54 和 53。 當您使用記事本開啟檔案時,當記事本顯示 54 時,它會顯示相應的“6”。
再次讀取 53,顯示相應的“5”。
-
由於資料結構是。
資料的長度(必須是 int)+ 資料的內容(可以是 char)以二進位資料流的形式儲存到各自的檔案中。
例如,然後考慮用 fread 讀取長度,然後用 fread 讀取資料段。
-
這是正常現象,這是作業系統的快取在起作用。
快取:用於解決 CPU 速度和記憶體速度之間的差異(CPU 計算速度比記憶體快得多)。
當程式需要讀取乙個檔案時,其實是把資料讀進記憶體中由CPU進行計算,CPU先去快取找,如果找不到,就會去記憶體讀取並複製到快取中進行下次訪問,這個時候, 速度自然很慢,當你第二次讀取檔案時,快取已經存在,CPU再次訪問資料會變得非常快。
這與系統讀取資料的方式有關,而不是因為函式效率低下,顯然:
如果搜尋某個磁碟下的檔名,第一次會慢一些,第二次會快很多,因為CPU第二次需要處理的資料已經儲存在快取中,處理效率會非常高。
-
當知道某個函式的引數不會被修改時,就可以使用 tst 來修改引數,這樣做的好處是可以防止無意中修改不想修改的引數,並且修改 const 物件可以在編譯過程中發現錯誤。
比如這個寫入函式中的緩衝區,從這個記憶體中讀取資料,然後寫入檔案,這個記憶體中的資料絕對不會改變,所以加乙個sink,保證它不會被修改,防止你緊張的時候喝醉了,無意中修改了它,也就是說, ST是為了防止自己犯錯誤。write 函式中的 const 是 write 函式的作者為了防止自己犯錯而新增的,這是一種習慣,呼叫方看到 const 就知道這個引數是唯讀的,如果這個引數發生變化,肯定不會是這個函式引起的。 幾乎所有的 C C++ 庫都遵循這個習慣。
不能將 read 引數新增到 const,因為這是從檔案中讀取資料寫入緩衝區的,因此緩衝區不能是唯讀的。
1.二進位 1000 替換為 16。
用8421的轉換方法,即從左到右,8*1+4*0+2*0+1*0=0x8,這是所有十六進製到二進位、位到位對齊轉換的通用轉換方法,分別乘以8421,然後加起來。 如果二進位數。 >>>More