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

📄 wcmb.c

📁 一个OPC服务器开发的源代码。结构清晰
💻 C
字号:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000 by Timofei Bondarenko                             *
                                                                          *
 string manipulations
 **************************************************************************/

#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include "util.h"

int lo_mbstowcs(loWchar *wcs, const char *mbs, int nn)
{
 int ii;
// if (-1 == nn) nn = strlen(mbs);
#ifdef _WIN32
# if 0/* This is not quite right call but in this file 'len' is already counted */
 ii = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, mbs, nn, wcs, nn);
# else
 ii = mbstowcs(wcs, mbs, nn);
# endif
 if (wcs && ii <= 0)
#endif
   for(ii = 0; ii < nn; ii++)
     {
#if 0
      wcs[ii] = (unsigned char)mbs[ii];
#else
      ((char*)wcs)[ii << 1] = mbs[ii];
      ((char*)wcs)[ii << 1 | 1] = '\0';
#endif
      if (!mbs[ii]) break;
     }
/* if (wcs && ii < len) wcs[ii] = 0;*/
 return ii;
}

int lo_wcstombs(char *mbs, unsigned mb_len, const loWchar *wcs, unsigned wc_len)
{
 unsigned ii, wc;

 if (!mbs)
   {
    for(wc = ii = 0; ii < wc_len && wcs[ii]; ii++)
      {
#ifdef _WIN32  /* due to error in wcstombs(NULL... */
       char tb[16/*MB_CUR_MAX*/];
       int wcl;
       if (1 < (wcl = wctomb(tb, wcs[ii]))) wc += wcl - 1;
#else
/*     if (wcs[ii] & ~0x7f) wc++;*/
#endif
      }
    ii += wc;
   }
 else
   for(wc = ii = 0; wc < wc_len && ii < mb_len; wc++)
     {
#ifdef _WIN32  /* due to error in wcstombs(NULL... */
      char tb[16/*MB_CUR_MAX*/];
      int wcl;
      if (0 < (wcl = wctomb(tb, wcs[ii])))
	{
	 if ((unsigned)wcl > mb_len - ii) wcl = mb_len - ii;
	   memcpy(mbs + ii, tb, wcl);
	 ii += wcl;
	}
      else
#else
        mbs[ii++] = (char)wcs[wc];
#endif
      if (!wcs[wc]) break;
     }
 return (int)ii;
}

/* end of wcmb.c */

⌨️ 快捷键说明

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