📄 wstring.c
字号:
/* * Simple wide string Library * Version 0.1 * 1999 by yoshidam */#include <stdio.h>#include "wstring.h"WString*WStr_alloc(WString* str){ str->size = WSTR_INITIAL_STRING_LEN; str->len = 0; if ((str->str = (int*)malloc(WSTR_INITIAL_STRING_LEN * sizeof(int))) == NULL) { str->size = 0; return NULL; } return str;}WString*WStr_enlarge(WString* str, int size){ int* newptr; if ((newptr = (int*)realloc(str->str, (str->size + size) * sizeof(int))) == NULL) { return NULL; } str->str = newptr; str->size += size; return str;}voidWStr_free(WString* str){ str->size = 0; str->len = 0; free(str->str);}intWStr_addWChars(WString* s, const int* a, int len){ if (s->len + len >= s->size) { WStr_enlarge(s, len + WSTR_STRING_EXTEND_LEN); } memcpy(s->str + s->len, a, len * sizeof(int)); s->len += len; return s->len;}intWStr_addWChar(WString* s, int a){ if (s->len + 1 >= s->size) { WStr_enlarge(s, WSTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a; (s->len)++; return s->len;}intWStr_pushWString(WString* s, const WString* add){ if (s->len + add->len >= s->size) { WStr_enlarge(s, add->len + WSTR_STRING_EXTEND_LEN); } memcpy(s->str + s->len, add->str, add->len * sizeof(int)); s->len += add->len; return s->len;}intWStr_addWChar2(WString* s, int a1, int a2){ if (s->len + 2 >= s->size) { WStr_enlarge(s, WSTR_STRING_EXTEND_LEN); } *(s->str + s->len) = a1; *(s->str + s->len + 1) = a2; s->len += 2; return s->len;}intWStr_addWChar3(WString* s, int a1, int a2, int a3){ if (s->len + 3 >= s->size) { WStr_enlarge(s, WSTR_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;}WString*WStr_allocWithUTF8(WString* s, const char* in){ int i; int u = 0; int rest = 0; WStr_alloc(s); for (i = 0; in[i] != '\0'; i++) { unsigned char c = in[i]; if (c >= 128 && c < 192) { if (rest == 0) return NULL; u = (u << 6) | (c & 63); rest--; if (rest == 0) { WStr_addWChar(s, u); } } else if (c < 128) { /* 0b0nnnnnnn (7bit) */ if (c == 0) return NULL; WStr_addWChar(s, c); rest = 0; } else if (c < 224) { /* 0b110nnnnn (11bit) */ rest = 1; u = c & 31; } else if (c < 240) { /* 0b1110nnnn (16bit) */ rest = 2; u = c & 15; } else if (c < 248) { /* 0b11110nnn (21bit) */ rest = 3; u = c & 7; } else if (c < 252) { /* 0b111110nn (26bit) */ rest = 4; u = c & 3; } else if (c < 254) { /* 0b1111110n (31bit) */ rest = 5; u = c & 1; } else { return NULL; } } return s;}UString*WStr_convertIntoUString(WString* wstr, UString* ustr){ int i; for (i = 0; i < wstr->len; i++) { UStr_addWChar(ustr, wstr->str[i]); } return ustr;}voidWStr_dump(WString* s){ int i; printf("[%d/%d] ", s->len, s->size); for (i = 0; i < s->len ; i++) { printf("%04x ", *(s->str + i)); } printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -