必要なヘッダーファイル:
#include <stdlib.h>
mbstowcs()関数
機能:マルチバイト文字をワイドバイトに変換します
プロトタイプ:
size_t mbstowcs(
wchar_t * wcstr、
const char * mbstr、
size_tカウント
);
パラメータの説明:
- wcstrターゲットキャッシュ。変換後にワイドバイト文字を格納するために使用されます。値がNULLの場合、戻り値はターゲットキャッシュに必要なwchar_tタイプの数です。
- mbstrは、変換されるマルチバイト文字列を格納するために使用されます
- countは、変換される最大バイト数を指定するために使用されます。wcstの値がNULLの場合、値は役に立ちません
戻り値:
- 変換が成功し、wcstr == NULLの場合、ターゲットキャッシュに必要なサイズ(wchar_tタイプの数、ただしターミネーターなし)を返します。
- 変換が成功し、wcstd!= NULLの場合、変換されたバイト数が返されます。
- 変換が成功しません。return(size_t)(-1);
使用手順:
- mbstowcs()関数を呼び出し、パラメーターwcstrをNULLに設定します(変換に必要な受信バッファーのサイズを取得するため)。
- 変換されたwchar_t文字列を格納するのに十分なメモリブロックをターゲットバッファ領域に割り当てます。
注:メモリー・ブロックのサイズは、mbstowcs()関数への最初の呼び出しの戻り値によって決定されます(戻り値にはターミネーターのスペースは含まれません)
- mbstowcs()関数を再度呼び出します。今回は、ターゲットキャッシュのアドレスをwcstrパラメーターとして渡します。
コード例:
strcpy(sBuf, "我最棒");
size_t sSize=strlen(sBuf);
wchar_t * dBuf=NULL;
//注意:需要多分配一个空间,以存放终止符
int dSize=mbstowcs(dBuf, sBuf, 0)+1;
dBuf=new wchar_t[dSize];
wmemset(dBuf, 0, dSize);
int nRet=mbstowcs(dBuf, sBuf, sSize);
if(nRet<=0)
{
printf("转换失败\n");
}
else
{
printf("转换成功%d字符\n", nRet);
wprintf(L"%ls\n", dBuf);
}
wcstombs()関数
機能:ワイドバイトをマルチバイト文字列に変換します
プロトタイプ:
size_t wcstombs(
char * mbstr、
const wchar_t * wcstr、
size_tカウント
);
パラメータの説明:
- wcstrターゲットキャッシュは、変換されたマルチバイト文字を格納するために使用されます。値がNULLの場合、戻り値はターゲットキャッシュに必要なwchar_tタイプの数です。
- mbstrは、変換されるワイド文字を格納するために使用されます。
- countは、受信バッファに格納できる最大バイト数を指定するために使用されます。
戻り値:
- 変換が成功し、mbstr == NULLの場合、ターゲットキャッシュに必要なサイズ(charタイプの数、ただしターミネーターなし)を返します。
- 変換が成功し、mbstr!= NULLの場合、変換されたバイト数が返されます。
- 変換が成功しなかった場合は、(size_t)(-1);を返します。
指示:
mbstowcs()メソッドに似ています
サンプルコード:
wchar_t sBuf[20]={0};
wcscpy(sBuf, L"Hello");
size_t sSize=wcslen(sBuf);
char * dBuf=NULL;
int dSize=wcstombs(dBuf, sBuf, 0)+1;
printf("需要%d Char\n", dSize);
dBuf=new char[dSize];
memset(dBuf, 0, dSize);
int nRet=wcstombs(dBuf, sBuf, dSize);
if(nRet<=0)
{
printf("转换失败\n");
}
else
{
printf("转换成功%d字符\n", nRet);
printf("%s\n", dBuf);
}
注:
ワイドバイト、つまりwchar_tタイプはUnicodeエンコーディングを使用します。これはWindowsではutf-16、Linuxではutf-32ですが、マルチバイトはutf-8、GB232などの他の多くのエンコーディング方法です。 ..したがって、通常の変換プロセスを実行するには、マルチバイトエンコーディングタイプを指定する必要があります。マルチバイトエンコーディングの関数を設定または取得します。setlocale()
必要なヘッダーファイル:locale.h
#include <locale.h>
ogo関数