2012-04-29 31 views
6

Tôi muốn listBox hiển thị các ID được lưu trữ tại một tệp. Các ID nằm trong giá trị thập lục phân.Đọc tập tin hex, chuyển đổi thành chuỗi và tải vào listBox

Tôi đang cố gắng tải tệp và chuyển đổi HEX thành ASCII, do đó, ListBox có thể tải tệp đó. Các tập tin cũng chứa một số thông tin như tên sản phẩm, mức mục, và như vậy ...

Đây là một mẫu của tập tin:

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 ; ................ 

Bỏ qua "50 12 00 00 2F D9 01 00 "tại beggining, đó là phiên bản tập tin và dữ liệu không liên quan khác, những gì tôi muốn phân tích vào listBox là mục ID" 01 "đó là ngay sau khi phiên bản của tập tin.

ID mục tiếp theo là "00000330h" và giá trị là "02". Đến cuối các tập tin bạn có thể thấy rằng có ID "03" ...

EDIT:

OK, bây giờ tôi đang tải các tập tin và đọc phần của mục bên trong của nó, nhưng tôi không có đầu mối làm thế nào để tải các ID vào listBox ... Các ID được phân cách với nhau bởi 807 byte, do đó, mỗi 807 byte có một ID.

Dưới đây là cách tôi đang tải phần của tập tin

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); 
+0

này để nhắc nhở tôi về máy tính lưu các tập tin trò chơi và có ELITE với TẤN tín :) –

+0

haha ​​vâng , nó là một cái gì đó như thế: P –

+0

không hiểu tại sao bạn muốn hex để chuyển đổi ascii?Đây có phải là dump hex chỉ trình bày trực quan của tập tin trong một số người xem hex? –

Trả lời

1

Cuối cùng đã hoàn thành những gì tôi đang tìm kiếm! Dưới đây là cách tiếp cận tôi lấy để làm cho nó làm việc: (Có thể không được khá, nhưng nó hoạt động!)

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)); 
     } 
    } 
} 
+0

Tôi không chắc rằng tôi hiểu sự cố định của bạn bằng cách xử lý điều này dưới dạng chuỗi Hex. Bạn có định sử dụng một chuỗi hex ở một nơi khác không? Trình soạn thảo văn bản của bạn hiển thị dữ liệu của bạn dưới dạng hex như một tiện ích cho bạn, nhưng dữ liệu id cơ bản không liên quan gì đến hex hoặc ASCII. Nếu mã của bạn đang hoạt động, điều đó thật tuyệt, nhưng tôi nghĩ bạn đang làm nhiều việc hơn bạn thực sự cần phải làm. –

+0

nếu nó không bị hỏng, đừng sửa nó lol nó hoạt động tốt cho tôi. –

2

Giả sử bạn biết làm thế nào để xác định vị trí các ID mà bạn muốn trong tập tin, và bạn biết chiều rộng của họ (ví dụ như bạn biết họ đang từng 4 byte gồm một Int32), bạn có thể sử dụng lớp BitConverter của C#, lấy một mảng byte và một chỉ mục và cho bạn trở lại kiểu số tương ứng. Bạn có thể phải trao đổi mọi thứ xung quanh nếu vấn đề cuối cùng là vấn đề.

Đọc tệp của bạn thành một mảng byte, sử dụng BitConverter tại mỗi offset bạn quan tâm, chuyển đổi số thành chuỗi và tải lên ListView của bạn.

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()); 
    } 
} 

Điền hoặc tính tham số bắt đầu nếu cần.

+0

Cảm ơn bạn! Tôi đã sử dụng mã của bạn làm cơ sở để làm những gì tôi muốn. –

0

Âm thanh không giống với dữ liệu ở định dạng Hex - âm thanh giống như biểu diễn mà trình chỉnh sửa cung cấp cho bạn. Thay vào đó, có vẻ như tệp này là một kết xuất nhị phân thẳng với văn bản được mã hóa dưới dạng luồng byte ASCII.

Trong trường hợp này, bạn muốn tách biệt một dải byte [] đại diện cho ký tự (có định nghĩa rõ ràng về các bản ghi, tên, vv không?). Cấp dữ liệu đó cho System.Text.ASCIIEncoding (http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx)

Một trong các quá tải GetString sẽ chuyển đổi dải byte thành ASCII bản văn. (http://msdn.microsoft.com/en-us/library/744y86tc.aspx)

+0

các ID cách nhau 807 byte và ở giữa có các dữ liệu khác về từng mục. Các giá trị nằm trong HEX, nhưng chúng được "đảo ngược", vì vậy tệp sẽ hiển thị giá trị hex "32 DF 14 3C", thực sự là "3C 14 DF 32" và sẽ dịch thành "1008000818" ở dạng thập phân. –

Các vấn đề liên quan