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

📄 gb2unicode.~cpp

📁 提供vc版短信网关源码
💻 ~CPP
字号:
#include "GB2UNICODE.h"
/* ------------------------------------------------------------------------- */

USGI Word_Unicode2GBcode(USGI Unicode)
/*
   查表将一个 UNICODE 码转换为 GB 码并返回,若找不到则返回 0

   M.L.Y  2002.4
*/
{
  int  i, n = (sizeof(GB2312_Unicode))/(sizeof(GB2312_Unicode[0]));

  for(i = 0; i < n; i++)
    if(GB2312_Unicode[i][1] == Unicode) return GB2312_Unicode[i][0];
  return 0;
}

/* ------------------------------------------------------------------------- */
int  cvt_Unicode2GB(USGC *strfrom, USGC *strto)
/*
   将 UNICODE 码字符串转换为 GB 码字符串,返回转换的汉字数

   M.L.Y  2002.4
*/
{
  int  i, j, k, n, conv;
  USGI w;
  USGL code_val;
  int  stat = 0; /* 0: ASCII, 1: #XX, 2: hanzi */

  for(i = 0, j = 0, n = 0; ; )
  {
    conv = NO;
    if(strfrom[i] == '#' && strfrom[i+1] >= '0' && strfrom[i+1] <= '9')
    {
      code_val = 0L;
      for(k = 1; ; k++)
      {
        if(strfrom[i+k] >= '0' && strfrom[i+k] <= '9')
          code_val = code_val * 10 + strfrom[i+k] - '0';
        else break;
      }
      if(k <= 6 && code_val <= 0xFFFF && code_val >= 128)
      {
        w = Word_Unicode2GBcode(code_val);
        if(w > 0)
        {
          conv = YES;
          if(stat != 2) strto[j++] = '\'';
          stat = 2;
          strto[j++] = (w & 0xFF00) >> 8;
          strto[j++] = w & 0x00FF;
          n++;
          i = i + k;
        }
      }
    }
    if(conv != YES)
    {
      if(stat == 2)
      {
        stat = 0;
        strto[j++] = '\'';
      }
      strto[j++] = strfrom[i];
      if(strfrom[i] == NUL) break;
      i++;
    }
  }
  for(i = 0, j = 0, k = 0; ; )
  {
    if(strto[i] == '\'' && strto[i+1] == '\'')
      i++;          /* 去掉连续的两个单引号 */
    else strto[j++] = strto[i];
    if(strto[i] == NUL) break;
    i++;
  }
  return n;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -