C言語 マルチバイト文字のバイト数を取得 - stdlib.h - [ mblen ]
2008.11.06 Thursday | by LRESULT
マルチバイト文字のバイト数を取得するには、mblen()を使用します。
マルチバイト文字とは、半角の「ABC123」という1バイト文字と、
全角の「あいうえお」という2バイト文字が混在した文字で、Shift_JISやEUC-JPという
文字セットがこれにあたります。
※ mblen()は、ロケールのLC_CTYPEの設定に依存する為、
日本語のマルチバイト文字を扱う際には、setlocale( LC_CTYPE, "jpn" )
という設定が必要になります。
書式 | int mblen( const char *s, size_t n ) |
---|---|
機能 | マルチバイト文字の長さを取得 |
引数 | const char *s : マルチバイト文字 size_t n : 判定するバイト数 |
戻り値 | 成功すると、マルチバイト文字のバイト数を返し、 失敗すると、-1を返します。 |
MB_CUR_MAX | 現在のロケールのLC_CTYPE設定で、 マルチバイト文字1文字に必要な、最大バイト数 |
---|---|
MB_LEN_MAX | 全てのロケールで、 マルチバイト文字1文字に必要な、最大バイト数 |
「Test テスト てすと¥n」という文字列を、1文字ずつ何バイトなのか調べてみます。 |
---|
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char *s = "Test テスト てすと¥n"; int len, i=0; setlocale( LC_CTYPE, "jpn" ); while( s[i] != '¥0' ){ len = mblen( &s[i], MB_CUR_MAX ); printf( "%d ", len ); i += len; } return 0; } |
1 1 1 1 1 2 2 2 1 2 2 2 1 |
---|
と、表示されます。 それぞれ「test テスト てすと¥n」に対応したバイト数になっており、 日本語の箇所が2バイトと判定されます。 mblen()を使う前に、setlocale()で日本語地域に設定する必要があります。 |