| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #include "string.h"
- #include "../kernel/debug.h"
- #include "../kernel/global.h"
- // 函数: _memset
- // 作用: 将dst_起始的size个字节设置为value
- // 参数: dst_ 为目标地址, value 为设置的值, size 为设置的字节数
- // 返回: 无
- void _memset(void *dst_, uint8_t value, uint32_t size)
- {
- ASSERT(dst_ != NULL);
- uint8_t *dst = (uint8_t *)dst_;
- while (size--)
- {
- *dst++ = value;
- }
- }
- // 函数: _memcpy
- // 作用: 将src_起始的size个字节复制到dst_起始地址
- // 参数: dst_ 为目标地址, src_ 为源地址, size 为复制的字节数
- // 返回: 无
- void _memcpy(void *dst_, const void *src_, uint32_t size)
- {
- ASSERT(dst_ != NULL && src_ != NULL);
- uint8_t *dst = (uint8_t *)dst_;
- const uint8_t *src = (const uint8_t *)src_;
- while (size--)
- {
- *dst++ = *src++;
- }
- }
- // 函数: _memcmp
- // 作用: 比较两个内存区域的内容
- // 参数: a_ 为比较的地址1, b_ 为比较的地址2, size 为比较的字节数
- // 返回: 相等返回0, a_大于b_返回1, a_小于b_返回-1
- int8_t _memcmp(const void *a_, const void *b_, uint32_t size)
- {
- const char *a = a_;
- const char *b = b_;
- ASSERT(a != NULL && b != NULL);
- while (size--)
- {
- if (*a != *b)
- {
- return *a > *b ? 1 : -1;
- }
- a++;
- b++;
- }
- return 0;
- }
- // 函数: _strcpy
- // 作用: 将字符串从src_复制到dst_
- // 参数: dst_ 为目标地址, src_ 为源地址
- // 返回: 目标地址
- char *_strcpy(char *dst_, const char *src_)
- {
- ASSERT(dst_ != NULL && src_ != NULL);
- char *r = dst_; // 用来返回目标地址
- while ((*dst_++ = *src_++))
- ;
- return r;
- }
- // 函数: _strlen
- // 作用: 返回字符串的长度
- // 参数: str 为字符串
- // 返回: 字符串的长度
- uint32_t _strlen(const char *str)
- {
- ASSERT(str != NULL);
- const char *p = str;
- while (*p++)
- ;
- return (uint32_t)(p - str - 1);
- }
- // 函数: _strcmp
- // 作用: 比较两个字符串
- // 参数: a_ 为比较的字符串1, b_ 为比较的字符串2
- // 返回: 相等返回0, a_大于b_返回1, a_小于b_返回-1
- int8_t _strcmp(const char *a_, const char *b_)
- {
- ASSERT(a_ != NULL && b_ != NULL);
- const char *a = a_;
- const char *b = b_;
- while (*a != 0 && *a == *b)
- {
- a++;
- b++;
- }
- return *a < *b ? -1 : *a > *b;
- }
- // 函数: _strchr
- // 作用: 在字符串中查找字符
- // 参数: str 为字符串, ch 为要查找的字符
- // 返回: 找到返回地址, 未找到返回NULL
- char *_strchr(const char *str, const uint8_t ch)
- {
- ASSERT(str != NULL);
- while (*str != 0)
- {
- if (*str == ch)
- {
- return (char *)str;
- }
- str++;
- }
- return NULL;
- }
- // 函数: _strrchr
- // 作用: 在字符串中查找字符(从后往前)
- // 参数: str 为字符串, ch 为要查找的字符
- // 返回: 找到返回地址, 未找到返回NULL
- char *_strrchr(const char *str, const uint8_t ch)
- {
- ASSERT(str != NULL);
- const char *last_char = NULL;
- // 从前往后查找字符,若存在 ch 字符,则将其地址赋值给 last_char,last_char 为最后一个 ch 字符的地址
- while (*str != 0)
- {
- if (*str == ch)
- {
- last_char = str;
- }
- str++;
- }
- return (char *)last_char;
- }
- // 函数: _strcat
- // 作用: 将字符串src_连接到dst_后
- // 参数: dst_ 为目标地址, src_ 为源地址
- // 返回: 目标地址(连接后的字符串)
- char *_strcat(char *dst_, const char *src_)
- {
- ASSERT(dst_ != NULL && src_ != NULL);
- char *str = dst_;
- while (*str++)
- ;
- --str;
- while ((*str++ = *src_++))
- ;
- return dst_;
- }
- // 函数: _strchrs
- // 作用: 在字符串中查找字符出现的次数
- // 参数: str 为字符串, ch 为要查找的字符
- // 返回: 字符出现的次数
- uint32_t _strchrs(const char *str, uint8_t ch)
- {
- ASSERT(str != NULL);
- uint32_t ch_cnt = 0;
- while (*str != 0)
- {
- if (*str == ch)
- {
- ch_cnt++;
- }
- str++;
- }
- return ch_cnt;
- }
|