????0x03 7???????????
????????????ASCII????????8bit???????????????????????Щ??????7bit????λ?0?????????????????£???????????7bit???±?????????????????????????????????????????????BitWriter????7bitд???????±????byte[]????????????????????漲??????8bit?????2???????????????????16bit?????????????????????????£?
public byte[] Encode(string text)
{
var len = text.Length * 7 + 24;
var writer = new BitWriter(len);
writer.WriteByte(2);
writer.WriteInt(text.Length?? 16);
for (int i = 0; i < text.Length; i++)
{
var b = Convert.ToByte(text[i]);
writer.WriteByte(b?? 7);
}
return writer.GetBytes();
}
?????????????????????????????????????????????????????????????????ζ??????????????£?
public string Decode(byte[] data)
{
var reader = new BitReader(data);
while (reader.Remain > 8)
{
var start = reader.ReadByte();
if (start == 2)
break;
}
var len = reader.ReadInt(16);
var result = new StringBuilder(len);
for (int i = 0; i < len; i++)
{
var b = reader.ReadInt(7);
var ch = Convert.ToChar(b);
result.Append(ch);
}
return result.ToString();
}
?????????????????????????????????????????????????

??????????????????????????????

????0x04 6???????????
????????????????????????????????????????????????????Сд??????????????????????????????26?????+10??????+???????????6bit??64?????б????????????????????????ASCII????????????????????????????0-10?????????????????????????????????????е???????????????????????????????????????????????????????????????????????????????????????????????С????????????????????????????????????????????????????????????6bit???±???
????????????
?????????7bit????????д??????????????????????е???????????????????????????????????6bit????д??BitWriter
public byte[] Encode(string text)
{
text = text.ToUpper();
var len = text.Length * 6 + 24;
var writer = new BitWriter(len);
writer.WriteByte(2);
writer.WriteInt(text.Length?? 16);
for (int i = 0; i < text.Length; i++)
{
var index = GetChar6Index(text[i]);
writer.WriteInt(index?? 6);
}
return writer.GetBytes();
}
private int GetChar6Index(char c)
{
for (int i = 0; i < 64; i++)
{
if (Dict.Custom[i] == c)
return i;
}
return 10; //return *
}
????????????
??????????????????????????????6bit??????????????????????????????
public string Decode(byte[] data)
{
var reader = new BitReader(data);
while(reader.Remain > 8)
{
var start = reader.ReadByte();
if (start == 2)
break;
}
var len = reader.ReadInt(16);
var result = new StringBuilder(len);
for (int i = 0; i < len; i++)
{
var index = reader.ReadInt(6);
var ch = Dict.Custom[index];
result.Append(ch);
}
return result.ToString();
}
???????????????6bit???????????????????????????????????Сд????е?????

???????????????????????????N??????????????10????????????????M bit??????4bit?????????????????????α????????????????????????????4bit???????????????????????????????????????????????????????????г????
????0x05 д???
??????????????????????????????????????????????????????????????????????????и?Ч?????????????????????????????????????????????????д????????????й?????ò?????????????????????????????????N????????????