Guest User

parsebank

a guest
Nov 23rd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.85 KB | None | 0 0
  1. void Main()
  2. {
  3.     var path = @"D:\bank.bin";
  4.     var data = File.ReadAllBytes(path);
  5.     int ofs0 = 0x1BE3C0;
  6.     int ofsK = 0x1BBE48;
  7.     int len0 = 0x130;
  8.     int lenK = ofs0-ofsK;
  9.    
  10.     //Console.WriteLine("Output: Table 0");
  11.     //spitTable(data, ofs0, len0);
  12.     var E = GetTable(data, ofs0, len0).ToArray();
  13.    
  14.    
  15.     //Console.WriteLine("Output: Table K");
  16.     //spitTable(data, ofsK, lenK);
  17.     var K = GetTable(data, ofsK, lenK).ToArray();
  18.    
  19.     //Console.WriteLine("Verifying Tables");
  20.     foreach (var z in verifyList(K))
  21.         Console.WriteLine(z);
  22. }
  23. private IEnumerable<string> verifyList(KeyValuePair<ushort, ushort>[] K)
  24. {
  25.     var enc = StringConverter.GSC2U_KOR; // reference PKHeX.Core and make this property public
  26.     foreach (var kv in K)
  27.     {
  28.         var k = kv.Key;
  29.         var t = k >> 8;
  30.         byte v = (byte)k;
  31.         char val = (char)kv.Value;
  32.        
  33.         var table = enc[t];
  34.         if (!table.TryGetValue(v, out string pkhex))
  35.             yield return $"Key not in PKHeX: {k:X3} = {val} (0x{(ushort)val:X4})";
  36.         else if (pkhex[0] != val)
  37.             yield return $"{k:X3} bad; {val} (0x{(ushort)val:X4}) != {(char)pkhex[0]} (pkh)";
  38.     }
  39. }
  40.  
  41. private void spitTable(byte[] data, int ofs, int len)
  42. {
  43.     var bytes = data.Skip(ofs).Take(len).ToArray();
  44.     for (int i = 0; i < bytes.Length; i+=4)
  45.     {
  46.         ushort a = BitConverter.ToUInt16(bytes, i + 0);
  47.         ushort b = BitConverter.ToUInt16(bytes, i + 2);
  48.         if (BitConverter.ToUInt32(bytes, 0) == 0)
  49.             continue;
  50.         Console.WriteLine($"{b:X2} -> {(char)a}");
  51.     }
  52. }
  53.  
  54. private IEnumerable<KeyValuePair<ushort,ushort>> GetTable(byte[] data, int ofs, int len)
  55. {
  56.     var bytes = data.Skip(ofs).Take(len).ToArray();
  57.     for (int i = 0; i < bytes.Length; i+=4)
  58.     {
  59.         ushort value = BitConverter.ToUInt16(bytes, i + 0);
  60.         ushort key = BitConverter.ToUInt16(bytes, i + 2);
  61.         if (BitConverter.ToUInt32(bytes, i) == 0)
  62.             continue;
  63.         yield return new KeyValuePair<ushort, ushort>(key, value);
  64.     }
  65. }
Add Comment
Please, Sign In to add comment