Files
stgsharp/编码器/StgSharpDataEncoder/Program.cs
T

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