注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲unicode wchar_t字符串与char字符串相互转换(2)  

2016-04-03 20:31:49|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
即以此功德,庄严佛净土。上报四重恩,下济三途苦。惟愿见闻者,悉发菩提心。在世富贵全,往生极乐国。

1)背景知识
http://anony3721.blog.163.com/blog/static/5119742016335351548/

2) unicode wchar_t字符串与char字符串相互转换

以下源码在C++BIUILDER Xe10和GCC 5中运行验证通过

C++BIUILDER Xe10 生成“控制台应用”:
File--->New ---->Other...---->Console Application---->勾选C++

/* wcstombs:Convert wide-character string to multibyte string, wchar_t->char
mbstowcs: Convert multibyte string to wide-character string*/

#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* wcstombs, wchar_t(C) */
#include <wchar.h>  /*wcslen: The length of C wide string*/
#include <locale.h>
#include <memory.h>

int main()
{
// --------------------------------------------------------------------------------------------
// wchar_t->char
//   const wchar_t str[] = L"南无阿弥陀佛!---南无阿弥陀佛! ";
const wchar_t str[] = L"Namo Amitabha 777 wchar_t<->char 555";
    // char buffer[32];
    char *buffer = ( char * )malloc( sizeof( char ) * ( 2 * wcslen( str ) + 1 ) ); // + 1 since buffer[end]='\0'
    int ret, wRet, wstrLen;
wchar_t * dBuf=NULL;
memset(buffer , 0 , 2 * wcslen(str)+1 );

    setlocale( LC_ALL, "chs" );
    wprintf( L"wchar_t string: %ls \n", str );
    printf( "wide str len = %d \n", wcslen( str ) );
    ret = wcstombs( buffer, str, 2 * wcslen( str ) + 1 );  // + 1 since buffer[end]='\0'
    printf( "ret = %d", ret );

    if ( ret )
        printf( "\n multibyte string: %s \n", buffer );

// --------------------------------------------------------------------------------------------
// char -> wchar_t
printf("Ansi str len = %d\n", strlen(buffer));
wstrLen = mbstowcs(dBuf, buffer, 0) + 1; // + 1 since buffer[end]='\0'
printf("wide str len = %d\n", wstrLen);
dBuf = ( wchar_t * )malloc( sizeof( wchar_t ) * wstrLen );
wmemset(dBuf, 0, wstrLen);
wRet = mbstowcs(dBuf, buffer, wstrLen);
    if ( wRet )
wprintf( L"\n char -> wchar_t string:\n %ls \n", dBuf );
getchar();
    return 0;
}
C++ builder XE10 运行结果
阿英讲unicode wchar_t字符串与char字符串相互转换(2) - 阿英 - Mr.Right
 
GCC 运行结果
阿英讲unicode wchar_t字符串与char字符串相互转换(2) - 阿英 - Mr.Right
 
 
  评论这张
 
阅读(204)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016