ぼるじょあがC/C++の宿題を片づけますYO! 42代目
■ このスレッドは過去ログ倉庫に格納されています
0121118
2005/04/20(水) 18:49:30static inline bool isSjisKana(unsigned char src) {return src >= 0xa1 && src <= 0xdf;}
static inline bool isSjisKanji1(unsigned char src){return src >= 0x81 && src <= 0x9f || src >= 0xe0 && src <= 0xfc;}
static inline bool isSjisKanji2(unsigned char src){return src >= 0x40 && src <= 0x7e || src >= 0x80 && src <= 0xec;}
static inline bool isSjisKanji(const unsigned char * src){return isSjisKanji1(src[0]) && isSjisKanji2(src[1]);}
//変換の本体
std::string sjis2euc(const char * str)
{
const unsigned char * src = reinterpret_cast<const unsigned char *>(str);
unsigned char * buf = new unsigned char[strlen(str) * 2];
unsigned ic = 0;
for (; src[0] != '\0'; ++src) {
if (isSjisKana(src[0])) {
ic += sjis2eucKana(& buf[ic], src);
} else if (isSjisKanji(src)) {
ic += sjis2euc(& buf[ic], src);
++src;
} else {
buf[ic++] = src[0];
}
}
buf[ic] = '\0';
std::string tmp = reinterpret_cast<const char *>(buf);
delete[] buf;
return tmp;
}
■ このスレッドは過去ログ倉庫に格納されています