字串:多位元組與寬位元組轉換
阿新 • • 發佈:2018-12-31
C 標準
#include <stdlib.h>
mbstowcs 多位元組字串轉換為寬字串
wcstombs 寬字串轉換為多位元組字串
在呼叫 mbstowcs 之前,先用 setlocale 將全域性預設 locale 設為當前系統預設 locale
如果是在非中文系統上轉 GBK 編碼,就需要指定中文 locale :
#include <locale.h>
setlocale(LC_ALL, "chs");
wcstombs例子:
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc(BUFFER_SIZE);
wchar_t *pWCBuffer = L"Hello, world.你好,世界。";
setlocale(LC_ALL, "chs");
count = wcstombs(NULL, pWCBuffer, 0); // 只獲取多位元組字串的長度
count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE); // 轉換並返回多位元組字串的長度
printf(" Characters converted: %u\n", count);
printf(" Multibyte character: %s\n\n", pMBBuffer);
free(pMBBuffer);
}
輸出:
Characters converted: 25
Multibyte character: Hello, world.你好,世界。
mbstowcs例子
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 100
int main(void)
{
size_t count;
char *pMBBuffer = "Hello, world.你好,世界。";
wchar_t *pWCBuffer = (wchar_t *)malloc(BUFFER_SIZE);
setlocale(LC_ALL, "chs");
count = mbstowcs(NULL, pMBBuffer, 0);
count = mbstowcs(pWCBuffer, pMBBuffer, strlen(pMBBuffer));
printf(" Characters converted: %u\n", count);
wprintf(L" Widebyte character: %s\n\n", pWCBuffer);
free(pWCBuffer);
}
輸出:
Characters converted: 19
Widebyte character: Hello, world.你好,世界。
Windows API
#include <Windows.h>
MultiByteToWideChar 多位元組轉寬位元組,並且支援字元編碼相互轉換(gbk–utf8)
WideCharToMultiByte 寬位元組轉多位元組,並且支援字元編碼相互轉換(gbk–utf8)
WideCharToMultiByte例子:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc(BUFFER_SIZE);
wchar_t *pWCBuffer = L"Hello, world.你好,世界。";
count = WideCharToMultiByte(0, 0, pWCBuffer, wcslen(pWCBuffer)+1, pMBBuffer, BUFFER_SIZE, NULL, NULL);
printf(" Characters converted: %u\n",count );
printf(" Multibyte character: %s\n\n",pMBBuffer );
free(pMBBuffer);
}
結果:
Characters converted: 26
Multibyte character: Hello, world.你好,世界。
MultiByteToWideChar例子:
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define BUFFER_SIZE 100
int main(void)
{
size_t count;
char *pMBBuffer = "Hello, world.你好,世界。";
wchar_t *pWCBuffer = (wchar_t *)malloc(BUFFER_SIZE);
count = MultiByteToWideChar(0, 0, pMBBuffer, strlen(pMBBuffer)+1, pWCBuffer, BUFFER_SIZE);
setlocale(LC_ALL, "chs"); // 設定wprintf正常顯示中文
printf(" Characters converted: %u\n", count);
wprintf(L" Widebyte character: %s\n\n", pWCBuffer);
free(pWCBuffer);
}
結果:
Characters converted: 20
Widebyte character: Hello, world.你好,世界。