none
請問如何開啟遊戲存檔 並修改其內容 RRS feed

  • 問題

  • 1.開啟遊戲存檔,資料呈現是類似UltraEdit(HEX or 16進制)。

    如連結圖示

     http://img11.imagevenue.com/img.php?image=40068_111_122_958lo.JPG

     

    我使用過c#教科書所教的方法,BinaryReader & BinaryWriter 跟StreamReader & StreamWriter。

    無法將檔案呈現出UltraEdit這種顯示方式。

    2.更改某些位置的資料並計算checksum,後並存檔。

    3.請提供checksum的方法,謝謝。

    2009年1月29日 下午 02:51

解答

  • 我看到你的變數名稱是 sr,故猜想你是用 StreamReader?(我還沒下載你的原始碼)。
    如果是這樣,請改用 BinaryReader,並使用 ReadByte 方法。因為 StreamReader 一般是用來處理文字檔。


    http://huan-lin.blogspot.com/
    • 已標示為解答 chiajung 2009年2月1日 下午 01:54
    2009年2月1日 上午 07:40

所有回覆

  • 1: 看來你需要的似乎是將讀出來的每個 byte 格式化成 16 進制的字串,例如:String.Format("X2", 255) 。至於在螢幕上的顯示和操作方式,若要做到像 UE 那樣....呃,這又是另一個問題了。

    2 & 3: 如果你不想用網路上現成的,例如:http://www.codeproject.com/KB/files/crcstream.aspx,不妨自己寫個簡單的計算 CheckSum 函式,例如:把檔案所有的 byte 值累加,再將總合除以 256 取其餘數,諸如此類的。當然,越簡單的演算法,checksum 的值越容易重複,而降低其辨識檔案完整性的可靠度。

    http://huan-lin.blogspot.com/
    2009年1月31日 下午 04:03
  • 先感謝Michael Tsai提供的訊息

    我使用a[i] = string.Format("{0:X2}",sr.Read());
    但是轉出來的還是跟UE有些不同,到後面連位置都跑掉了,請幫我看一下。

    我讀的值超出255,會變成四位數 如(F8F8),而後面的位置就跑掉了(跟UE的值對不起來)。

    遇到UE藍色框框中的紅色圈的 ? 值就會變掉,可是值讀出是沒有錯誤的。


    1.想先瞭解UE藍色框框那部份是怎樣的資料(是ACSII碼嗎?),試了一下好像不是。
    2.存檔讀出來的值,好像不是只有轉成 Hexadecimal 這麼簡單。


    程式執行,按open file,即可(要讀得存檔已經放入)。




    我的程式 下載




     
    • 已編輯 chiajung 2009年2月1日 上午 07:44
    2009年2月1日 上午 06:38
  • 我看到你的變數名稱是 sr,故猜想你是用 StreamReader?(我還沒下載你的原始碼)。
    如果是這樣,請改用 BinaryReader,並使用 ReadByte 方法。因為 StreamReader 一般是用來處理文字檔。


    http://huan-lin.blogspot.com/
    • 已標示為解答 chiajung 2009年2月1日 下午 01:54
    2009年2月1日 上午 07:40
  • 非常感謝,果然一試就成功了。

    在請問一下 UE的資料中,右邊(藍色框框是怎樣的格式)。
    2009年2月1日 下午 01:51
  • 右邊你標示為藍色的區塊,是與左邊的 16 進制的 byte 對應的 ASCII 字元。但由於不是每一個字元都可在視窗中顯示出來(有許多是非顯示/列印的字元),所以你會看到很多以小數點代表的字元。
    http://huan-lin.blogspot.com/
    2009年2月1日 下午 01:55