02-18-2018, 09:34 PM
Пробую написать программу для разбора i3pack
Но не понимаю что делать дальше , точнее как
Programmator скидывал структуру файла, но вот как это реализовать я пока не понял.
Вот код:
[SRC=Csharp]
public class Program
{
public static void Main(string[] args)
{
byte[] bin;
string inputFilename = @"D:\String.i3Pack";
using (FileStream fs = new FileStream(inputFilename, FileMode.Open))
using (BinaryReader br = new BinaryReader(fs))
{
bin = br.ReadBytes(Convert.ToInt32(fs.Length));
}
for (var i = 0; i < bin.Length; i += 2048)
{
Unshift(bin, i, 3);
}
Process.GetCurrentProcess().WaitForExit();
}
public static void Unshift(byte[] buffer, int start, int bits)
{
int length = buffer.Length - start;
byte last = buffer[length - 1];
byte current;
for (int i = length - 1; (i & 0x80000000) == 0; i--)
{
if (i <= 0)
{
current = last;
}
else
{
current = buffer[i - 1];
}
buffer[i] = (byte)(current << (8 - bits) | buffer[i] >> bits);
}
Console.WriteLine(buffer.ToHex());
File.AppendAllText(@"D:\Test.txt", buffer.ToHex());
}
[/SRC]
Но не понимаю что делать дальше , точнее как
Programmator скидывал структуру файла, но вот как это реализовать я пока не понял.
Вот код:
[SRC=Csharp]
public class Program
{
public static void Main(string[] args)
{
byte[] bin;
string inputFilename = @"D:\String.i3Pack";
using (FileStream fs = new FileStream(inputFilename, FileMode.Open))
using (BinaryReader br = new BinaryReader(fs))
{
bin = br.ReadBytes(Convert.ToInt32(fs.Length));
}
for (var i = 0; i < bin.Length; i += 2048)
{
Unshift(bin, i, 3);
}
Process.GetCurrentProcess().WaitForExit();
}
public static void Unshift(byte[] buffer, int start, int bits)
{
int length = buffer.Length - start;
byte last = buffer[length - 1];
byte current;
for (int i = length - 1; (i & 0x80000000) == 0; i--)
{
if (i <= 0)
{
current = last;
}
else
{
current = buffer[i - 1];
}
buffer[i] = (byte)(current << (8 - bits) | buffer[i] >> bits);
}
Console.WriteLine(buffer.ToHex());
File.AppendAllText(@"D:\Test.txt", buffer.ToHex());
}
[/SRC]