簡析 mbstowcs() & wcstombs()

這是我參與新手入門的第3篇文章javascript

mbstowcs()

size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) 複製代碼

參數說明java

  • pwds -- 指向一個 wchar_t 元素的數組,數組長度足以存儲一個最大字符長度的寬字符串。
  • str -- 要被轉換的多字節字符字符串。
  • n -- 可被轉換的最大字符數。

返回說明數組

  • 返回轉換爲參數 pwcs 所指向的數組。

經過該函數能夠將多字節字符轉換成寬字符markdown

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()

把寬字符把轉換成多字節字符串ide

size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count);
複製代碼

參數說明函數

  • mbstr -- 指向一個 char 元素的數組,數組長度足以存儲一個最大字符長度的字符串。
  • str -- 要被轉換的寬字符字符串。
  • n -- 可被轉換的最大字符數。

返回說明ui

  • 返回轉換爲參數 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:編碼

一、Unicode轉換爲ANSI使用:MultiByteToWideChar。

   二、ANSI轉換爲Unicode使用:WideCharToMultiByte。
複製代碼

Linux:spa

寬字符轉多字符:code

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-八、ACSII等

所以,若是想要轉換成想要轉換的編碼,須要在調用前,調用setlocale()函數設置編碼方式,指定多字節編碼類型。

相關文章
相關標籤/搜索