国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

C++字符編碼轉(zhuǎn)化代碼

時間:2008-10-04 16:03:00   來源:無憂考網(wǎng)     [字體: ]
C++字符編碼轉(zhuǎn)化代碼,大家可以自己編譯下看看。
  bool GB2312_AnsiToUnicode(char *lpszOut, const char* lpszIn,
  const char* lpszCurCode/* = NULL*/,
  const char* lpszOutCode/* = NULL*/)
  {
  #ifdef WIN32 // _WIN32
  //Do nothing
  int lpszOut_size=GB2312_AnsiToUnicode_Size(lpszIn);
  //這函數(shù)與操作系統(tǒng)相關(guān),XP下用CP_THREAD_ACP,win2000下用CP_ACP
  MultiByteToWideChar(CP_THREAD_ACP, 0,lpszIn,strlen(lpszIn)+1,(unsigned short*)lpszOut,lpszOut_size);
  #else // _WIN32
  #ifdef HAVE_ICONV
  /* Use iconv to convert the message into utf-16.
  * \"char\" and \"\" are aliases for the local 8-bit encoding */
  iconv_t cd;
  // ICONV_CONST char *from_str = message;
  char *from_str = (char*)lpszIn;
  char *to_str = lpszOut;
  size_t from_sz = strlen(lpszIn) + 1;
  // size_t to_sz = from_sz*4;
  size_t to_sz = GB2312_AnsiToUnicode_Size(lpszIn);
  size_t res;
  int i;
  char lpszCodeName_From[30], lpszCodeName_To[30];
  if (lpszCurCode)
  strcpy(lpszCodeName_From, lpszCurCode);
  else
  strcpy(lpszCodeName_From, \"gb2312\");
  if (lpszOutCode)
  strcpy(lpszCodeName_To, lpszOutCode);
  else
  strcpy(lpszCodeName_To, \"UTF-16\");
  #ifdef _DEBUG
  fprintf(stdout, \"Convert ’%s’ from %s to %s\\n\", lpszIn, lpszCodeName_From, lpszCodeName_To);
  #endif
  // if ((cd = iconv_open(\"unicode\", \"gb2312\")) == (iconv_t)-1) {
  if ((cd = iconv_open(lpszCodeName_To, lpszCodeName_From)) == (iconv_t)-1) {
   perror(\"Couldn’t open iconv\");
   return false;
    }
    res = iconv(cd, &from_str, &from_sz, &to_str, &to_sz);
    if (res == -1) {
  perror(\"Couldn’t use iconv\");
  return false;
    }
    iconv_close(cd);
  #endif
  #ifdef _DEBUG
  fprintf(stdout, \"Convert result: ’%s’\\n\", lpszOut);
  #endif
  #endif // End of _WIN32
  return true;
  }
  int GB2312_AnsiToUnicode_Size(const char* lpszIn)
  {
  int iCounter = 0;
  for (int index = 0; lpszIn[index]; index++) {
  if( (unsigned char)lpszIn[index] > 127 )
  {
   index++;
  }
  else
  {
   ;
  }
  iCounter+=2;
  }
  iCounter += 4;
  #ifdef _DEBUG
  fprintf(stdout, \"GB2312_AnsiToUnicode_Size() return %d\\n\", iCounter);
  #endif
  return iCounter;
  // return 48;
  }