■
SJIS判定
改行を80文字間隔くらいで適度にいれたいとき
/* 非漢字 0x8140-0x84BE 第一水準 0x889F-0x9872 第二水準 0x989F-0x9FFC, 0xE040-0xEAA4 NEC 特殊文字 0x8740-0x879C NEC選定IBM拡張文字 0xED40-0xEEFC IBM選定IBM拡張文字 0xFA40-0xFC4B */ #define SJIS(c) \ (((((unsigned char)c)>=0x81)&&(((unsigned char)c)<=0x9f))\ ||((((unsigned char)c)>=0xe0)&&(((unsigned char)c)<=0xfc))) int nSpl = 79; int nLen = size > nSpl ? nSpl : size; if(nLen>xxxx) { while(((unsigned)p[nLen-1])&0x80) nLen--; nLen += ((nSpl - nLen) / 2 * 2); //二の倍数になるよ } memcpy(rString.GetBufferSetLength(nLen), p, nLen*sizeof(TCHAR));
末尾から判定するときは、上位ビットが立っていないところまでモドって2の倍数分だけすすむ
{0x80, 0x33, 0x88, 0x80, 0x66, 0x88, 0x86, 0x89, 0x84} <1 <1 <1 <1 >2 >2
ちなみに半角文字判定はしてない
半角文字まで確実に戻りたいなら、頭から判定するか、二文字比較しないとだめ
あれ 結局 SJIS判定使ってないんじゃ...www