UNICODE字符串与多字节字符串的转换
相互转换的两个函数的声明:
1. 多字节字符串与宽字符串的转换
int MultiByteToWideChar(
UINT CodePage, // code page,一般设为 CP_ACP
DWORD dwFlags, // character-type options,一般为设0
LPCSTR lpMultiByteStr, // string to map,指向一个多字节字符串
int cbMultiByte, // number of bytes in string,多字节字符串的长度(字节数,当以0结尾的时候,也可以设为-1)
LPWSTR lpWideCharStr, // wide-character buffer,存放转换后的宽字符串缓冲区
int cchWideChar // size of buffer,宽字符串缓冲区的最大长度(字符数)
);
2. 宽字符串与多字节字符串的转换
int WideCharToMultiByte(
UINT CodePage, // code page,一般设为 CP_ACP
DWORD dwFlags, // performance and mapping flags,一般为设0
LPCWSTR lpWideCharStr, // wide-character string,指向一个宽字符串
int cchWideChar, // number of chars in string,宽字符串的长度(字符数)
LPSTR lpMultiByteStr, // buffer for new string,存放转换后的多字节字符串缓冲区
int cbMultiByte, // size of buffer,多字节字符串缓冲区的最大长度(字节数)
LPCSTR lpDefaultChar, // default for unmappable chars,转换失败的字符所显示的字符串,一般设为NULL
LPBOOL lpUsedDefaultChar // set when default char used,如果有字符转换失败,则为TRUE,一般设为NULL
);
3. 用法
#include <STDLIB.H>
#include <LOCALE.H>
#include <Windows.h> int main(int argc, char* argv[])
{
setlocale(LC_ALL,""); // 否则无法输出中文 char ansiStr[] = "这是一个ANSI字符串";
printf( "ansiStr: %s\n", ansiStr ); wchar_t wideStr[] = L"这是一个UNICODE字符串";
wprintf( L"wideStr: %s\n", wideStr ); // 转换ANSI字符串到UNICODE字符串
int len = MultiByteToWideChar(CP_ACP, , ansiStr, -, NULL, ); // 先取得转换后的UNICODE字符串所需的长度
wchar_t* buf1 = (wchar_t*)calloc(len, sizeof(wchar_t)); // 分配缓冲区
MultiByteToWideChar(CP_ACP, , ansiStr, -, buf1, len); // 开始转换
wprintf(L"转换后的UNICODE字符串: %s\n", buf1); // 输出转换后的字符串
free(buf1); // 释放缓冲区 // 转换UNICODE字符串到ANSI字符串
len = WideCharToMultiByte(CP_ACP, , wideStr, -, NULL, , NULL, NULL); // 先取得转换后的ANSI字符串所需的长度
char* buf2 = (char*)calloc(len, sizeof(char)); // 分配缓冲区
WideCharToMultiByte(CP_ACP, , wideStr, -, buf2, len, NULL, NULL); // 开始转换
printf("转换后的ANSI字符串: %s\n", buf2); // 输出转换后的字符串
free(buf2); // 释放缓冲区 return ;
}
UNICODE字符串与多字节字符串的转换的更多相关文章
- 关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试
#pragma once #include <stdio.h> //getchar() #include <tchar.h> #include <stdlib.h> ...
- PHP 多字节字符串 函数
参考资料 多字节字符编码方案和他们相关的问题相当复杂,超越了本文档的范围. 关于这些话题的更多信息请参考以下 URL 和其他资源. Unicode materials » http://www.uni ...
- Go strconv模块:字符串和基本数据类型之间转换
本文转自Golove博客:http://www.cnblogs.com/golove/p/3262925.html ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRU ...
- java字符串应用之字符串编码转换
[转载]原文地址:https://blog.csdn.net/zhouyong80/article/details/1900100 无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其 ...
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
What? 如何分类? 如何使用? //String 类提供处理 Unicode 代码点(即字符)(TT观点:指的莫非就是对象的意思.)和 Unicode 代码单元(即 char 值)的方法.(TT观 ...
- Python判断字符串编码以及编码的转换
转自:http://www.cnblogs.com/zhanhg/p/4392089.html Python判断字符串编码以及编码的转换 判断字符串编码: 使用 chardet 可以很方便的实现字符串 ...
- 简单入门PHP中的多字节字符串操作
什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起. 一个字符占几个字节并不是我们表面上看到的那样.正常情况下,一个数字或英文以及英文符号都是占用一个字节的. ...
- Swift3.0语言教程使用Unicode范式标准化获取字符串
Swift3.0语言教程使用Unicode范式标准化获取字符串 Swift3.0语言教程使用Unicode范式标准化获取字符串,在NSString中可以使用4个属性去使用Unicode范式标准化获取字 ...
- 字符串与Objec之间互相转换
字符串与Objec之间互相转换可通过json实现. JSON.parse(str);// 字符串转Json Object JSON.stringify(obj);// Obj转字符串
随机推荐
- 黄聪:C#设置窗体打开位置(在显示器的右下角打开)
; ; this.SetDesktopLocation(x, y); 注释:System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Wid ...
- MarkDowdPad 破解
一部小心把markdown破解了,把破解后的主程序发出来吧,放到安装根目录即可.点击升级到专业,随意输入邮箱和8位注册码,确定后会显示失败,返回即可,然后你就会发现已经变成专业版了. 不知道博客园怎么 ...
- (C/C++) Callback Function 回调(diao)函数
原文: http://www.codeguru.com/cpp/cpp/cpp_mfc/callbacks/article.php/c10557/Callback-Functions-Tutorial ...
- python (1)一个简单的爬虫: python 在windows下 创建文件夹并写入文件
1.一个简单的爬虫:爬取豆瓣的热门电影的信息 写在前面:如何创建本来存在的文件夹并写入 t_path = "d:/py/inn" #本来不存在inn,先定义路径,然后如果不存在,则 ...
- TextView的属性列表
网上收集和自己整理的TextView控件中可选择的属性列表,经常可以用到的: android:autoLink 设置是否当 文本为URL链接/email/电话号码/map时,文本显示为可点 ...
- 转--Android如何在java代码中设置margin
======== 3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...
- 如何刪除GitHub中的repository
如何刪除一github中的repository,這本該是個非常簡單的操作,可一開始搜的時候,有不少文章比較含糊.這裡就記錄下來吧. 1.訪問https://github.com/settings/pr ...
- 深入ThreadLocal之二
概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资 ...
- block作为类的属性时用copy
1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的 <栈 :由系统维护的局 ...
- java小程序 示例 菲薄垃圾数列
package com.test; import java.util.Scanner; import org.junit.Test; import com.sun.xml.internal.ws.ap ...