⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wstring.c

📁 一个关于韩语unicode编码的C语言库文件
💻 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 + -