旋钮编码器c代码_C语言中的通用字符串编码器#

疑问句。。。框架中没有任何内容,但可以这样做:

public static byte[] Encode(string input, string reference) {

int size = 1;

while ((1 << ++size) < reference.Length);

byte[] result = new byte[(size * input.Length + 7) / 8];

new BitArray(

input

.Select(c => {

int index = reference.IndexOf(c);

return Enumerable.Range(0, size).Select(i => (index & (1 << i)) != 0);

})

.SelectMany(a => a)

.ToArray()

).CopyTo(result, 0);

return result;

}

public static string Decode(byte[] encoded, int length, string reference) {

int size = 1;

while ((1 << ++size) < reference.Length);

return new String(

new BitArray(encoded)

.Cast()

.Take(length * size)

.Select((b, i) => new { Index = i / size, Bit = b })

.GroupBy(g => g.Index)

.Select(g => reference[g.Select((b, i) => (b.Bit ? 1 : 0) << i).Sum()])

.ToArray()

);

}

代码有点复杂,但那是因为它可以处理每个字符的任何位数,而不仅仅是4位。

您可以像问题中那样对字符串进行编码,但字符串包含

不同的角色,不是11个:

string reference = "cn=1;pl23vf0";

string input = "cn=1;pl=23;vf=3;vv=0";

byte[] encoded = Encode(input, reference);

要解码字符串,您还需要原始字符串的长度,因为无法从编码数据的长度中分辨出来:

string decoded = Decode(encoded, input.Length, reference);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值