这是我参与新手入门的第3篇文章
mbstowcs()
size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
复制代码参数说明
- pwds — 指向一个 wchar_t 元素的数组,数组长度足以存储一个最大字符长度的宽字符串。
- str — 要被转换的多字节字符字符串。
- n — 可被转换的最大字符数。
返回说明
- 返回转换为参数 pwcs 所指向的数组。
通过该函数可以将多字节字符转换成宽字符
Example
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <wchar.h>
 
int main(void)
{
         
	strcpy(utf8_str, "12345");
	int strlen = 10;
	size_t len = strlen(utf8_str) + 1;
	wchar_t *wstr = malloc(len * sizeof(wchar_t));
	if (!wstr) {
		return -1;
	}
	len = mbstowcs(wstr, utf8_str, len);
	wstr[len] = 0;
	free(wstr);
	return ret;
}
复制代码wcstombs()
把宽字符把转换成多字节字符串
size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count);
复制代码参数说明
- mbstr — 指向一个 char 元素的数组,数组长度足以存储一个最大字符长度的字符串。
- str — 要被转换的宽字符字符串。
- n — 可被转换的最大字符数。
返回说明
- 返回转换为参数 mbstr 所指向的数组。
Example
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <wchar.h>
 
int main(void)
{
    Object str, newstr;
	const size_t len = wcstombs(NULL, str->value.wstring, 0) + 1;
	String_Realloc(newstr, len);
	wcstombs(newstr->value.string, str->value.wstring, len);
}
复制代码使用场景
Win:
   1、Unicode转换为ANSI使用:MultiByteToWideChar。
   2、ANSI转换为Unicode使用:WideCharToMultiByte。
复制代码Linux:
宽字符转多字符:
   size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );
复制代码多字符转宽字符:
   size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count );
复制代码需要注意的是,不同的平台中,宽字节和多字节字符的实现方式不同,比如wchar_t 类型采用Unicode编码方式实现,而Unicode其在Windows中为utf-16,在Linux中为utf-32。
而多字节有多种实现方式,如utf-8、ACSII等
因此,如果想要转换成想要转换的编码,需要在调用前,调用setlocale()函数设置编码方式,指定多字节编码类型。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    




















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
