6

ファイルに保存されている ID を listBox に表示したい。ID は 16 進値です。

ファイルをロードしてHEXをASCIIに変換しようとして立ち往生しているので、listBoxはそれをロードできます。このファイルには、アイテム名、アイテム レベルなどの詳細情報も含まれています...

ファイルのサンプルを次に示します。

00000000h: 50 12 00 00 2F D9 01 00 01 00 00 00 00 00 00 00 ; P.../Ù..........
00000010h: 46 65 61 74 68 65 72 20 45 61 72 72 69 6E 67 00 ; Feather Earring.
00000020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000030h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000040h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000050h: 00 00 00 00 0A 00 00 00 07 00 02 00 00 00 00 00 ; ................
00000060h: 00 00 00 00 00 00 00 00 00 00 00 00 B8 88 00 00 ; ............¸ˆ..
00000070h: 00 0C 00 00 00 00 00 00 00 00 00 00 20 00 00 00 ; ............ ...
00000080h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000090h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000000f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000100h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000110h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000120h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000130h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000140h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000150h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000160h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000170h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000180h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000190h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000001f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000200h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000210h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000220h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000230h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000240h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000250h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000260h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000270h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000280h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000290h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000002f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000300h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000310h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000320h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000330h: 02 00 00 00 00 00 00 00 4A 61 64 65 20 45 61 72 ; ........Jade Ear
00000340h: 72 69 6E 67 00 00 00 00 00 00 00 00 00 00 00 00 ; ring............
00000350h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000360h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000370h: 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 ; ................
00000380h: 07 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000390h: 00 00 00 00 20 A1 07 00 00 0C 00 00 00 00 00 00 ; .... ¡..........
000003a0h: 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 ; .... ...........
000003b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000003c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000003d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000003e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000003f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000400h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000410h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000420h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000430h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000440h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000450h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000460h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000470h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000480h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000490h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000004f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000500h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000510h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000520h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000530h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000540h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000550h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000560h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000570h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000580h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000590h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005e0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
000005f0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000600h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000610h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000620h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000630h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000640h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000650h: 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 ; ................

最初の「50 12 00 00 2F D9 01 00」、つまりファイル バージョンやその他の無関係なデータは無視します。listBox に解析したいのは、ファイルのバージョンの直後にある項目 ID「01」です。

次のアイテム ID は「00000330h」で、値は「02」です。ファイルの終わりに向かって、ID「03」があることがわかります...

編集:

OK、ファイルをロードしてその中のアイテムのセクションを読んでいますが、ID を listBox にロードする方法がわかりません... ID は 807 バイトずつ離れているため、807 バイトごとにID。

ファイルのセクションをロードする方法は次のとおりです

    int itemSectionStart = 0x00000000;
    int itemSectionEnd = 0x002e11e0;

    FileStream fstream = new FileStream("C:\\Users\\xxx\\Desktop\\xxx\\xxx\\xxx.dec", FileMode.Open);
    BinaryReader breader = new BinaryReader(fstream);
    long length = fstream.Length;

    breader.BaseStream.Position = itemSectionStart;
    byte[] itemSection = breader.ReadBytes(itemSectionEnd);
4

3 に答える 3

2

ファイル内で必要な ID を見つける方法を知っていて、その幅を知っていると仮定すると (たとえば、それぞれが Int32 を構成する 4 バイトであることを知っている)、バイト配列とインデックスを受け取る C# のBitConverterクラスを使用できます。対応する数値型を返します。エンディアンが問題になる場合は、交換が必要になる場合があります。

ファイルをバイト配列に読み取り、必要な各オフセットで BitConverter を使用し、数値を文字列に変換して、ListView を読み込みます。

int startIndex = 8;
int recordStride = 128;
int numRecords = 4;

using (FileStream str = File.OpenRead("myfile.ext")) {
    for (int i = 0; i < numRecords; i++) {
        byte[] data = new byte[4];
        str.Seek(startIndex + recordStride * i, SeekOrigin.Begin);
        str.Read(data, 0, 4);
        if (NeedToByteSwap)
            Array.Reverse(data);

        int id = BitConverter.ToInt32(data, 0);
        AddToListView(id.ToString());
    }
}

必要に応じて開始パラメータを入力または計算します。

于 2012-04-29T19:43:25.790 に答える
1

ついに私が探していたものを達成しました!これを機能させるために私が取ったアプローチは次のとおりです: (きれいではないかもしれませんが、機能します!)

private string hex2dec(string hexString)
{
    StringBuilder sb = new StringBuilder();
    sb.Append(long.Parse(hexString, System.Globalization.NumberStyles.HexNumber));
    return sb.ToString();
}

private void button1_Click(object sender, EventArgs e)
{
    int numRecords = 3737;
    int itemSectionStart = 0x00000008;
    int itemSectionEnd = 0x002e11ec;

    using (FileStream str = File.OpenRead("C:\\Users\\xxx\\Desktop\\xxx\\xxx\\xxx.dec"))
    {
        BinaryReader breader = new BinaryReader(str);
        breader.BaseStream.Position = itemSectionStart;
        byte[] itemSection = breader.ReadBytes(itemSectionEnd);

        int j = 0;
        int k = j++;
        for (int i = 0; i < numRecords; i++)
        {
            string id = BitConverter.ToString(itemSection, 808 * k++, 7);
            string[] strArrayID = id.Split(new char[] { '-' });
            string reversedID = strArrayID[6] + strArrayID[5] + strArrayID[4] + strArrayID[3] + strArrayID[2] + strArrayID[1] + strArrayID[0];
            listBox1.Items.Add(this.hex2dec(reversedID));
        }
    }
}
于 2012-04-30T06:02:57.540 に答える
0

データが 16 進形式のようには聞こえませんが、エディターが提供した単なる表現のように聞こえます。代わりに、ファイルはテキストが ASCII バイト ストリームとしてエンコードされたストレート バイナリ ダンプである可能性が高いようです。

その場合、文字を表す byte[] 範囲を分離する必要があります (レコード、名前などを区切る明確な定義はありますか?)。それを System.Text.ASCIIEncoding (http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx) にフィードします。

GetString オーバーロードの 1 つは、バイト範囲を ASCII テキストに変換します。(http://msdn.microsoft.com/en-us/library/744y86tc.aspx)

于 2012-04-29T19:53:29.267 に答える