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下数据类型的长度
