public string Decode(byte[] bs) { var sb = new StringBuilder(bs.Length * 8); for (int i = 0; i < bs.Length; i++) { sb.Append(Convert.ToString(bs[i], 2).PadLeft(8, '0')); } var data_str = sb.ToString(); sb.Clear(); var count = Convert.ToByte(data_str.Substring(0, 6), 2); // 正文部分解码的位置 var cursor = count + 6; for (int i = 0; i < count; i++) { if (data_str[6 + i] == '1') // huffman解码 { var t = _reDat.GetShortestPrefix(data_str, cursor, data_str.Length); if (t != null) { cursor += t.Item1; sb.Append(t.Item2); } else { throw new Exception("Huffman decode error"); } } else // 普通解码 { var us = Convert.ToUInt16(data_str.Substring(cursor, 16), 2); cursor += 16; var c = (char)us; sb.Append(c); } } return(sb.ToString()); }