c语言 encode,关于encode和decode。今年的搜狐C,C++招聘线测题。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#include

#include

int encode(const void* raw_in, void* raw_out, uint32_t password, size_t len)

{

const uint8_t* in = (const uint8_t*)raw_in;

uint8_t* out = (uint8_t*)raw_out;

size_t i;

uint32_t seed = password ^ 0x31dbd86u;

for(i = 0 ; i < len; ++i)

{

uint8_t a = ( in[i] ^ seed ) >> 1;

uint8_t b = ( ( ((uint32_t)in[i]) << 17 ) ^ seed ) >> (17-7);

a &= 127;

b &= 128;

a = 127 & ( a ^ (b << 3));

out[i] = a | b;

seed = ((seed ^ in[i]) * 1792013 + in[i]);

}

}

int decode(const void* raw_in, void* raw_out, uint32_t password, size_t

len)

{

const uint8_t* in = (const uint8_t*)raw_in;

uint8_t* out = (uint8_t*)raw_out;

uint32_t seed = password ^ 0x31dbd86u;

for (size_t i = 0 ; i < len; ++i) {

// 请在此处补全代码

}

}

int main()

{

const uint8_t buf1[] = {0x80, 0x04, 0x7f, 0x0d, 0xf9, 0x40, 0x7e,

0x26, 0x2d, 0xd7, 0x8b, 0x85, 0x61, 0x36, 0xd9, 0x09, 0x08, 0x8b,

0x2e, 0xc8, 0x47, 0x6b, 0x3b, 0x83, 0xdb, 0x62, 0x87, 0x5d, 0x47,

0x95, 0x61, 0x39, 0x99, 0xfb, 0xf0, 0x7c, 0xeb, 0x17, 0xd3, 0xdf,

0xfb, 0xc7, };

uint8_t buf2[100] = {};

const uint32_t password = 0x7a89be4cu;

const size_t len = sizeof(buf1);

decode(buf1, buf2, password, len);

printf("%s\n", buf2);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值