lizhendong
级别: 家园常客
精华主题: 0
发帖数量: 593 个
工控威望: 781 点
下载积分: 1951 分
在线时间: 805(小时)
注册时间: 2016-10-12
最后登录: 2024-05-09
查看lizhendong的 主题 / 回贴
楼主  发表于: 2023-07-27 18:25
C语言大侠们,如何详细解读这两个函数???


char *b24e(char *buf, unsigned char *byst, size_t sizeOfBytes)
{
    int i = 0;
    unsigned char *p = byst;
    while ((size_t)(i = (p-byst)) < sizeOfBytes) {
        buf[2*i] = sel[((*p) >> 4)];
        buf[(2*i)+1] = sel[23 - ((*p) & 0x0f)];
        p++;
    }
    buf[(2*i)+1] = '\0';
    return buf;
}

unsigned char *b24d(unsigned char *buf, char *str, size_t countOfChars)
{
    size_t i;
    char *p = str;
    char *loc[2];
    unsigned char n[2];
    if (countOfChars % 2)
        return NULL;
    for (i = 0; i < (countOfChars>>1); i++) {

        loc[0] = strchr( sel, str[2*i] );
        loc[1] = strchr( sel, str[ ( 2*i ) + 1 ] );
        if (loc[0] == NULL || loc[1] == NULL)
            return NULL;
        n[0] = (unsigned char)( loc[0] - sel );
        n[1] = 23 - (unsigned char)( loc[1] - sel );
        buf = (unsigned char)((n[0] << 4) | n[1]);
    }
    return buf;
}
030403118
自动项目、PLC、视觉、通讯等工控软件开发QQ3515716
级别: 工控侠客

精华主题: 3 篇
发帖数量: 1982 个
工控威望: 2898 点
下载积分: 25146 分
在线时间: 1373(小时)
注册时间: 2014-01-05
最后登录: 2024-05-16
查看030403118的 主题 / 回贴
1楼  发表于: 2023-07-28 08:18
这个方法名为b24e,是加密,它的作用是将给定的字节数组编码成Base24格式的字符串
这个方法名为b24d,是解密,它的作用是将给定的Base24格式的字符串解码成字节数组
祝你好运
项目、视觉、通讯QQ3515716
金蛇郎君czz
车到山前必有路 czz674613079@163.com
级别: 网络英雄
精华主题: 0
发帖数量: 1897 个
工控威望: 7277 点
下载积分: 89 分
在线时间: 426(小时)
注册时间: 2019-05-22
最后登录: 2024-05-16
查看金蛇郎君czz的 主题 / 回贴
2楼  发表于: 2023-07-28 11:14
跟大佬们学习一下
czz674613079@163.com
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 444 个
工控威望: 678 点
下载积分: 66140 分
在线时间: 986(小时)
注册时间: 2010-09-05
最后登录: 2024-03-29
查看liuliangdt的 主题 / 回贴
3楼  发表于: 2023-07-29 12:39
//b24e是一个返回char类型指针的函数,函数带3个参数。一个signed char类型指针,一个unsigned char类型指针,一个堆栈块数量的参数
char *b24e(char *buf, unsigned char *byst, size_t sizeOfBytes)
{
    int i = 0;
    
    //指针p指向形参(*byst)
    unsigned char *p = byst;
    
    //第一次循环(i = p - byst) = 0强制转换成(size_t)类型跟参数sizeOfBtes比较。结果大概率是真
    while ((size_t)(i = (p-byst)) < sizeOfBytes) {
        
        //sel是数组。数据(*p)右移4位作为sel数组的标号。(sel[((*p) >> 4)]是作32位数据处理,并且是在做类似压栈操作。buf[2 * i]是char类型数组,搞不懂为什么这样做?)
        buf[2*i] = sel[((*p) >> 4)];
        
        //((*p) & 0x0f)是上面右移了的4位,最小是0,最大是15。sel[8~23]中的一个字节数据赋值给buf[(2*i)+1]
        buf[(2*i)+1] = sel[23 - ((*p) & 0x0f)];
      
       //指针加一
        p++;
    }
    
    //数组byst处理完后在buf后面加0,数组bug[]现在存的是字符串数据
    buf[(2*i)+1] = '\0';
    
   //返回指针buf
    return buf;
}

太难了,我也不知道什么意思,欢迎大神指正错误。