zoukankan      html  css  js  c++  java
  • 宽字符与多字符相互转换

    宽字符:每个字符统一占4个字节, sizeof(wchar_t) = 4,编码格式为Unicode。

    多字符:对于字符和数字,每个字符占1个字节,每个汉字占3个字节。sizeof(char) = 1, sizeof(汉字) = 3,编码格式为GBK

    多字符串与宽字符串之间的转换:代码示例如下:

     1 #include <stdio.h>
     2 #include <wchar.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 #include <locale.h>
     6 
     7 int main()
     8 {
     9     wchar_t *wstr = L"abcd一二三四", *wst;
    10     char *mstr="五六七八xyz", *mst;
    11     int len = 0;
    12 
    13     printf("
    ");
    14      
    15     setlocale(LC_ALL,"");                         //此句必须要加上
    16     //宽字符串转多字符串
    17     printf("wcstombs:宽字符串转多字符串
    ");
    18     printf("源宽字符串:%ls, 长度:%d
    ", wstr, wcslen(wstr));
    19     len = (int)wcstombs(NULL, wstr, 0) + 1;        //获取目标字符串的长度 最后+1是为了存储结束符''
    20     mst = (char *)malloc(sizeof(char) * len);    //为存储多字符串分配空间
    21     wcstombs( mst, wstr, len);                    //转换
    22     printf("目标字符串的理论长度:%d
    ", len - 1);        
    23     printf("目标字符串的实际长度:%d
    ", strlen(mst));
    24     printf("转换结果:%s
    ",mst);
    25     free(mst);                                    //释放内存
    26 
    27     printf("
    ");
    28 
    29     //多字符串转宽字符串
    30     printf("mbstowcs:多字符串转宽字符串
    ");
    31     printf("源多字符串:%s, 长度:%d
    ", mstr, strlen(mstr));
    32     len = (int)mbstowcs(NULL, mstr, 0) + 1;            //获取转换后宽字符串的长度 最后+1是为了存储结束符''    
    33     wst = (wchar_t *)malloc(sizeof(wchar_t) * len);    //为存储宽字符串分配空间
    34     mbstowcs(wst, mstr, len);                        //转换
    35     printf("目标字符串的理论长度:%d
    ", len - 1);
    36     printf("目标字符串的实际长度:%d
    ",wcslen(wst));
    37     printf("转换结果:%ls
    ",wst);
    38     free(wst);                                        //释放内存
    39 
    40     return 0;
    41 }

    运行结果:

  • 相关阅读:
    debian8 vga 文本模式下出现闪屏
    Delphi中根据分类数据生成树形结构的最优方法
    SQL获取每月、每季度、每年的最后一天记录
    Delphi实现树型结构
    Delphi中initialization和finalization
    Delphi 连接 Paradox
    delphi2007单个文件(pas)的控件安装
    Delphi安装*.pas扩展名的控件
    数据库组件介绍(Delphi)
    Delphi控件开发浅入深出(三)
  • 原文地址:https://www.cnblogs.com/cmembd/p/3577280.html
Copyright © 2011-2022 走看看