通用函数实现

1,库函数实现代码

/******************************************************my_srand()******************************************************/
static unsigned long seed_next = 1; // 静态全局变量,作为种子

void my_srand(unsigned int seed) // 通过传不同的参数更改种子值,一般传time(NULL)
{
    seed_next = (unsigned long)seed;
}

int my_rand(void) // 将srand更改过的种子值通过公式计算出结果作为随机值
{
    seed_next = seed_next * 214013L + 2531011L;
    return ((seed_next >> 16) & 0x7fff);
}
// void __cdecl srand(
//     unsigned int seed)
// {
//     _getptd()->_holdrand = (unsigned long)seed;
// }

// int __cdecl rand(
//     void)
// {
//     _ptiddata ptd = _getptd();

//     return (((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
// }
/******************************************************my_strcmp()******************************************************/
// int my_strcmp(const char *p1, const char *p2)
// {
//     const unsigned char *s1 = (const unsigned char *)p1;
//     const unsigned char *s2 = (const unsigned char *)p2;
//     unsigned char c1, c2;

//     do
//     {
//         c1 = (unsigned char)*s1++;
//         c2 = (unsigned char)*s2++;
//         if (c1 == '\0')
//             return c1 - c2;
//     } while (c1 == c2);

//     return c1 - c2;
// }
 
int my_strcmp(const char* src,const char* dst)   
{   
    int ret=0;   
    while(!(ret=*(unsigned char*)src-*(unsigned char*)dst)&&*dst)   
        ++src,++dst;   
    if(ret<0)   
        ret=-1;   
    else if(ret>0)  
        ret=1   ;   
    return ret;   
}
/******************************************************my_memset()******************************************************/
#include <stddef.h> 
void *my_memset(void *str, int c, size_t n)
{
    char *xs = str;
    while (n--)
        *xs++ = c;
    return str;
}
/******************************************************my_memcpy()******************************************************/
#include <stddef.h> 
void *my_memcpy(void *str1, const void *str2, size_t n)
{
    if (NULL == str1 || NULL == str2)
    {
        return NULL;
    }
    void *ret = str1;
    // 判断源地址和目标地址的位置关系,如果没有重叠或者目标地址在源地址之后
    if (str1 <= str2 || (char *)str1 >= (char *)str2 + n)
    {
        // 没有内存重叠,从低地址开始复制
        while (n--)
        {
            *(char *)str1 = *(char *)str2;
            str1 = (char *)str1 + 1;
            str2 = (char *)str2 + 1;
        }
    }
    else
    {
        // 有内存重叠,从高地址开始复制
        str2 = (char *)str2 + n - 1;
        str1 = (char *)str1 + n - 1;
        while (n--)
        {
            *(char *)str1 = *(char *)str2;
            str1 = (char *)str1 - 1;
            str2 = (char *)str2 - 1;
        }
    }
    return ret;
}

2,在32位MCU下数据类型的长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值