Win32API マルチバイト文字の先頭バイトかどうかを判別する IsDBCSLeadByte

Windowsでは、Shift-JIS(932)が用いられるためマルチバイト文字列の検索等の文字列処理を行う場合、バイト列として処理を行うと上手くいかないケースがある。そのようなときは、マルチバイト文字の先頭か否かを判別するなどして特殊な処理を入れなければならない。このとき、IsDBCSLeadByte()関数を使う。

以下のコードは、マルチバイト文字列「あいうえお」を用いて、マルチバイトの先頭バイトか否かを判別している。

#include <windows.h>
#include <stdio.h>

int main()
{
	BYTE mb[] = "あいうえお";
	size_t len = sizeof(mb) / sizeof(mb[0]);

	for (size_t i = 0; i < len; i++) {
		if (IsDBCSLeadByte(mb[i])) {
			printf("0x%02X is DBCSLeadByte\n", mb[i]);
		} else {
			printf("0x%02X is not DBCSLeadByte\n", mb[i]);
		}
	}

	return 0;
}