int GB18030Cut(const unsigned char *buf, int max)
{
int i = 0;
for (; i < max;)
{
if (0 == buf[i])
{
break;
}
if (buf[i] <= 0x7F)
{
++i;
continue;
}
if ((buf[i] >= 0x81) && (buf[i] <= 0xFE)
&& (((buf[i + 1] >= 0x40) && (buf[i + 1] <= 0x7E))
|| ((buf[i + 1] >= 0x80) && (buf[i + 1] <= 0xFE))))
{
i += 2;
continue;
}
if ((buf[i] >= 0x81) && (buf[i] <= 0xFE)
&& (buf[i + 1] >= 0x30) && (buf[i + 1] <= 0x39)
&& (buf[i + 2] >= 0x81) && (buf[i + 2] <= 0xFE)
&& (buf[i + 3] >= 0x30) && (buf[i + 3] <= 0x39))
{
i += 4;
continue;
}
++i;
}
return i;
}