/**
截取中文字
输入参数:str为gbk编码的中文以及英文
num为要截取的字节数
输出参数:out为截取后的字段。
返回值:结束时的字符是否为中文 1:是 0:否
**/
int split_gbk_by_length(const char *str,const int num,char *out)
{
int slen = strlen(str),offset = 0,currentlen = 0,endIsCh = 0;
int len = slen > num ? num:slen;
unsigned char ch = 0;
const char *head = str;
if(*str == 0)
return;
while(*str != 0 && currentlen < len){
ch = *str;
if(ch >= 0x81 && ch <= 0xFE){
offset = 2;
endIsCh = 1;
}else{
offset = 1;
endIsCh = 0;
}
str += offset;
currentlen += offset;
}
if(currentlen > len){
if(endIsCh)
currentlen -= 2;
else
currentlen -= 1;
}
memmove(out,head,currentlen);
return endIsCh;
}
截取前N个字节中文(仅仅GBK有效)
最新推荐文章于 2024-07-12 18:56:03 发布