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" )
  という設定が必要になります。


mblen
書式 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()で日本語地域に設定する必要があります。

カテゴリ:C言語 stdlib.h | 23:16 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/118

トラックバック