1 // Copyright (C) 2017 Kazuhiro Fujieda <fujieda@users.osdn.me>
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
18 namespace KancolleSniffer
\r
20 public static class Ascii85
\r
22 public static string Encode(byte[] input)
\r
26 var output = new StringBuilder();
\r
27 output.Append("<~");
\r
28 foreach (byte ch in input)
\r
30 tuple |= (uint)ch << (24 - 8 * count++);
\r
33 output.Append(tuple == 0 ? "z" : Encode85(tuple, count));
\r
38 output.Append(Encode85(tuple, count));
\r
39 output.Append("~>");
\r
40 return output.ToString();
\r
43 private static string Encode85(uint tuple, int count)
\r
45 var buf = new char[5];
\r
46 for (var j = 4; j >= 0; j--)
\r
48 buf[j] = (char)(tuple % 85 + '!');
\r
51 Array.Resize(ref buf, count + 1);
\r
52 return new string(buf);
\r