50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
#include "rt_string.h"
|
|
|
|
int rt_memcmp(const void* s1, const void* s2, rt_size_t n) {
|
|
const unsigned char *p1 = s1, *p2 = s2;
|
|
for (rt_size_t i = 0; i < n; ++i) {
|
|
if (p1[i] != p2[i])
|
|
return p1[i] - p2[i];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int rt_strcmp(const char* s1, const char* s2) {
|
|
while (*s1 && *s2 && (*s1 == *s2)) {
|
|
s1++;
|
|
s2++;
|
|
}
|
|
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
|
|
}
|
|
|
|
void* rt_memcpy(void* restrict dest, const void* restrict src, rt_size_t n) {
|
|
u8_t* d = dest;
|
|
const u8_t* s = src;
|
|
for (rt_size_t i = 0; i < n; ++i)
|
|
d[i] = s[i];
|
|
return dest;
|
|
}
|
|
|
|
void* rt_memset(void* dest, int val, rt_size_t n) {
|
|
u8_t* p = dest;
|
|
for (rt_size_t i = 0; i < n; ++i)
|
|
p[i] = (u8_t)val;
|
|
return dest;
|
|
}
|
|
|
|
rt_size_t rt_strlen(const char* s) {
|
|
const char* p = s;
|
|
while (*p) p++;
|
|
return p - s;
|
|
}
|
|
|
|
/* strhash - 字符串哈希(用于符号表) */
|
|
u32_t rt_strhash(const char* s) {
|
|
u32_t hash = 2166136261u; // FNV-1a偏移基础值
|
|
while (*s) {
|
|
hash ^= *s++;
|
|
hash *= 16777619u;
|
|
}
|
|
return hash;
|
|
}
|