Windows 上将一个由多字节字符串转换为 Unicode 形式

我们使用 Windows 函数 MultiByteToWideChar 将多字节字符串转换为宽字符串。如下所示:

int MultiByteToWideChar(
    UINT      uCodePage,       //标识了与多字节字符关联的一个代码页值
    DWORD     dwFlags,         //允许进行额外控制, 但一般传入 0
    PCSTR     pMultiByteStr,  //要转换的字符串
    int       cbMultiByte,     //字符串的长度, 若传入 -1, 则自动判断长度
    PWSTR     pWideCharStr,    //得到的 Unicode 字符串会传入指定的内存缓冲区
    int       cchWideChar);    //指定缓冲区的最大长度

转换的具体步骤:

1. 调用 MultiByteToWideChar,

为 pWideCharStr 参数传入 NULL,

为 cchWideChar  参数传入 0,

为 cbMultiByte    参数传入 -1。

2. 分配足以容纳转换后的 Unicode 字符串的一个内存块。

它的大小是上一个 MultiByteToWideChar 调用的返回值乘以 sizeof(wchar_t)。

3. 再次调用 MultiByteToWideChar,这一次

将缓冲区地址作为 pWideCharStr 参数的值传入,

将第一次 MultiByteToWideChar 调用的返回值乘以 sizeof(wchar_t) 后得到大小作为 cchWideChar 参数的值传入。

4. 使用转换后的字符串。

5. 释放Unicode字符串占用的内存块。

时间: 2024-10-11 15:13:16

Windows 上将一个由多字节字符串转换为 Unicode 形式的相关文章

java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

1 package com.llh.demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * @author llh 8 * 9 */ 10 public class Test { 11 /* 12 * 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果(使用数组存储) 13 */ 14 public static void main(String[] args) { 15 Scanner sc = new Scanner(System.in

【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 String 对象或文字.该对象不会被 split 方法修改.separator 可选项.字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符.如果忽 略该选项,返回包含整个字符串的单一元素数组. limit可选项.该值用来限制返回数组中的元素个数. 说明:split 方法的结果

转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的一个地方,我们对它进行了总结和归纳.本篇文章我们将继续讲解C++开发中容易混淆的另一个概念——多字节字符集与Unicode字符集. 多字节字符与宽字节字符 char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节

把字符串转换为数字

C当中有一些函数专门用于把字符串形式转换成数值形式. printf()函数和sprintf()函数 -->通过转换说明吧数字从数字形式转换为字符串形式: scanf()函数把输入字符串转换为数值形式: 应用场景: 编写程序需要使用数值命令形参,但是命令形参被读取为字符串.要使用数值必须先把字符串转换为数字. atoi()函数: int atoi(char *str); 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int mai

使用eval()将json字符串转换为对象要多加一个小括号

使用eval()将json字符串转换为对象要多加一个小括号:关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval()函数将json格式字符串转换为对象的时候,需要多嵌套一层小括号,下面就介绍一下它的原因,希望能够对需要的朋友带来帮助.先看一段转换代码: var jsonStr='{"webName":"蚂蚁部落","webAddress":"青岛市南区

Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

Sql Server 中将由逗号","分割的一个字符串,转换为一个表,并应用与 in 条件 select * from tablenmae where id in(1,2,3) 这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql语句 string aa="1,2,3"; string sqltxt="select * from tablename where id in ("+aa+")

python中将指定的字符串转换为大写字母并每隔2个字符用空格分割后得到一个新字符串的方法

在例子中对指定的字符串: faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5 使用了三种方法将其转换为大写字母并每隔2个字符用空格分割处理后得到一个新字符串,为: FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00

c/c++ 中文字符串转Unicode和UTF8

1. 描述 在windows上做系统编程,少不了会遇到处理中文字符串的问题.而大多时候中文汉字都是以多字节编码的方式展现的.为了实现更好的兼容性或一些特殊的需求,(比如在网页上显示.)常需要将其转换成unicode或者utf8的格式. 2. 代码示例 2.1 中文字符串转Unicode /************************************************************************ *int CN2Unicode(char *input,wcha

多字节字符集与Unicode字符集

在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset). 多字节字符集: 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个 字符,总共表示128个字符,其中包括了 英文字母.数字.标点符号等常用字符.之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号.后来,由于各国语言的加入,