81 lines
2.4 KiB
C#
81 lines
2.4 KiB
C#
using StgSharp.Data;
|
|
using StgSharp.Data.FileIO;
|
|
|
|
using StgSharpData;
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Concurrent;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace StgSharpDataEncoder
|
|
{
|
|
internal class Program
|
|
{
|
|
static unsafe void Main(string[] args)
|
|
{
|
|
string test =
|
|
"aaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbsddfdsfsdfdsfsdfsdfsdfsdfsdfdsfsdfdsfsdfsdfsdfsdfsfsdfsdfccccccccccccccccccccccccc";
|
|
|
|
|
|
|
|
byte[] array = CodeSeparator.SeparateCode<byte>(
|
|
Encoding.UTF8.GetBytes(test));
|
|
List<(byte, ulong)> list = CodeSeparator.CountCodeFrequency(array);
|
|
foreach (var i in list)
|
|
{
|
|
Console.WriteLine($"{i.Item1}\t{i.Item2}");
|
|
}
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
|
|
HuffmanTree<byte> tree = HuffmanTree<byte>.BuildHuffmanTree(list);
|
|
foreach (var i in tree.LeafList)
|
|
{
|
|
Console.WriteLine($"{i.Value}\t{i.frequency}\t" +
|
|
$"{(i.Left == null ? 0 : i.Left.frequency)}\t" +
|
|
$"{(i.Right == null ? 0 : i.Right.frequency)}");
|
|
}
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
|
|
Dictionary<byte, HuffmanKey<byte>> encodeDictionary
|
|
= tree.BuildHuffmanDictionary();
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
foreach (var item in encodeDictionary)
|
|
{
|
|
Console.WriteLine(
|
|
$"{item.Key}\t" +
|
|
$"{item.Value}"
|
|
);
|
|
}
|
|
Encode.Freeze(encodeDictionary);
|
|
|
|
EncodeStream encodeStream = new EncodeStream();
|
|
foreach (var item in array)
|
|
{
|
|
var bits = encodeDictionary[item];
|
|
encodeStream.WriteBits(bits);
|
|
}
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
foreach (var item in encodeStream.EncodeData)
|
|
{
|
|
Console.Write($"{item}\t");
|
|
}
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
Console.WriteLine($"{array.Length}\t{encodeStream.Length}");
|
|
|
|
SSDraw testRaw = new SSDraw("test");
|
|
testRaw.WriteRaw(encodeStream.EncodeData.ToArray());
|
|
testRaw.CreateRawFile("",true);
|
|
}
|
|
}
|
|
}
|