📄 ustring.c
字号:
/* * Simple string library * Version 0.2 * 1999 by yoshidam */#include <stdio.h>#include "ustring.h"UString*UStr_alloc(UString* str){ str->size = USTR_INITIAL_STRING_LEN; str->len = 0; if ((str->str = (unsigned char*)malloc(USTR_INITIAL_STRING_LEN)) == NULL) { str->size = 0; return NULL; } return str;}UString*UStr_enlarge(UString* str, int size){ unsigned char* newptr; if ((newptr = (unsigned char*)realloc(str->str, str->size + size)) == NULL) { return NULL; } str->str = newptr; str->size += size; return str;}voidUStr_free(UString* str){ str->size = 0; str->len = 0; free(str->str);}intUStr_addChars(UString* s, const unsigned char* a, int len){ if (s->len + len >= s->size) { UStr_enlarge(s, len + USTR_STRING_EXTEND_LEN); } memcpy(s->str + s->len, a, len); s->len += len; return s->len;}intUStr_addChar(UString* s, unsigned char a){ if (s->len + 1 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a; (s->len)++; return s->len;}intUStr_addChar2(UString* s, unsigned char a1, unsigned char a2){ if (s->len + 2 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; s->len += 2; return s->len;}intUStr_addChar3(UString* s, unsigned char a1, unsigned char a2, unsigned char a3){ if (s->len + 3 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; *(s->str + s->len + 2) = a3; s->len += 3; return s->len;}intUStr_addChar4(UString* s, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4){ if (s->len + 4 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; *(s->str + s->len + 2) = a3; *(s->str + s->len + 3) = a4; s->len += 4; return s->len;}intUStr_addChar5(UString* s, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4, unsigned char a5){ if (s->len + 5 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; *(s->str + s->len + 2) = a3; *(s->str + s->len + 3) = a4; *(s->str + s->len + 4) = a5; s->len += 5; return s->len;}intUStr_addChar6(UString* s, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4, unsigned char a5, unsigned char a6){ if (s->len + 6 >= s->size) { UStr_enlarge(s, USTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; *(s->str + s->len + 2) = a3; *(s->str + s->len + 3) = a4; *(s->str + s->len + 4) = a5; *(s->str + s->len + 5) = a6; s->len += 6; return s->len;}intUStr_addWChar(UString* ustr, int c){ if (c < 128) { /* 0x0000-0x00FF */ UStr_addChar(ustr, c); } else if (c < 2048) { /* 0x0100-0x07FF */ unsigned char b2 = c & 63; unsigned char b1 = c >> 6; UStr_addChar2(ustr, b1 | 192, b2 | 128); } else if (c < 0x10000) { /* 0x0800-0xFFFF */ unsigned char b3 = c & 63; unsigned char b2 = (c >> 6) & 63; unsigned char b1 = c >> 12; UStr_addChar3(ustr, b1 | 224, b2 | 128, b3 | 128); } else if (c < 0x200000) { /* 0x00010000-0x001FFFFF */ unsigned char b4 = c & 63; unsigned char b3 = (c >> 6) & 63; unsigned char b2 = (c >> 12) & 63; unsigned char b1 = c >> 18; UStr_addChar4(ustr, b1 | 240, b2 | 128, b3 | 128, b4 | 128); } else if (c < 0x4000000) { /* 0x00200000-0x03FFFFFF */ unsigned char b5 = c & 63; unsigned char b4 = (c >> 6) & 63; unsigned char b3 = (c >> 12) & 63; unsigned char b2 = (c >> 18) & 63; unsigned char b1 = c >> 24; UStr_addChar5(ustr, b1 | 248, b2 | 128, b3 | 128, b4 | 128, b5 | 128); } else if (c < 0x80000000) { /* 0x04000000-0x7FFFFFFF */ unsigned char b6 = c & 63; unsigned char b5 = (c >> 6) & 63; unsigned char b4 = (c >> 12) & 63; unsigned char b3 = (c >> 18) & 63; unsigned char b2 = (c >> 24) & 63; unsigned char b1 = (c >> 30) & 63; UStr_addChar6(ustr, b1 | 252, b2 | 128, b3 | 128, b4 | 128, b5 | 128, b6 | 128); } return ustr->len;}voidUStr_dump(UString* s){ int i; printf("[%d/%d] ", s->len, s->size); for (i = 0; i < s->len ; i++) { printf("%02x ", *(s->str + i)); } printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -