爱发资源网
社会主义核心价值观的加解密 2.00
分类 软件资源
类型 开源源码
软件资源C语言 + Windows
演示 -

看到有人发了这个工具,觉得这个挺好玩的,就动手写了一个。

思路:按字节来处理,把每个字节的8位分半,汉字先转换为无符号数,但由于社会主义核心价值观只有12个词,4位二进制能表示最大的数是15,所以大于等于11的再弄成2个数。最后按顺序构成字符串就可以了。

主要源码

char *enstrs[12] = {"富强","民主","文明","和谐","自由","平等","公正","法治","爱国","敬业","诚信","友善"};
char destrs[255] = {0};
char *decoder(char *str)
{
    int i = 0, j = 0;
    char dearr[9999];
    char c;
    char left,right;
    unsigned char uc;
    if(strlen(str) % 4 != 0){
        return 0;
    }
    while(str[i]){
        uc = str[i];
        if(destrs[uc] == 0){//错误下标
            return 0;
        }else if(destrs[uc] == 12){//等于12要加2个
            left = (destrs[uc] - 1) + (destrs[uc=str[i+=4]] - 1);
        }else {
            left = destrs[uc] - 1;
        }
 
        if(destrs[uc=str[i+=4]] == 0){//右边同样操作
            return 0;
        }else if(destrs[uc] == 12){
            right = (destrs[uc] - 1) + (destrs[uc=str[i+=4]] - 1);
        }else {
            right = destrs[uc] - 1;
        }
        c = (left << 4) + right;//左右合并,并化为有符号数
        //printf("(%d,%d)",i,c);
        dearr[j++] = c;
        i+=4;
    }
    dearr[j] = 0;
    return dearr;
}
char *encoder(char *str)
{
    int i,j = 0;
    unsigned char uc;
    char left,right;
    char arr[9999];
    char result[9999] = {0};
    for(i = 0;str[i] != 0;i++)
    {
        uc = str[i];//化为无符号整数
        left = uc >> 4;//取左边4位
        right = uc & '\x0f';//取右边4位
        if(left >= 11){//大于等于11的统统做2个处理
            arr[j++] = 11;
            arr[j++] = left - 11;
        }else {
            arr[j++] = left;
        }
        if(right >= 11){//右边同样的操作
            arr[j++] = 11;
            arr[j++] = right - 11;
        }else {
            arr[j++] = right;
        }
        //if(i % 4 == 0)
        //printf("%d,left=%d,right=%d\n",uc ,left,right);
    }
    for(i = 0;i < j;i++){
        strcat(result,enstrs[arr[i]]);
    }
    return result;
}


暂无内容

暂无评价

更多评论