substring按字节截取(用C#写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串 但是要保证汉字不被)

本文目录
用C#写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串 但是要保证汉字不被
楼上正解
c#中字符集用的unicode字符集,该字符集用2字节表示一个字符
所以字符中 英文字母,汉字所占用的空间一样都是16位
也就是说 在c#中 一个汉字也是一个字符 而不是2个字符,一个汉字任何时候都不会被截为两半
c#按字节数截取字符串
需要判断是否为中文或英文字符,代码:
public static string CutByteString(string str,int startIndex,int len)
{
string result=string.Empty;// 最终返回的结果
if(string.IsNullOrEmpty(str)) { return result; }
int byteLen=System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
int charLen=str.Length;// 把字符平等对待时的字符串长度
if(startIndex==0)
{ return CutByteString(str,len); }
else if(startIndex》=byteLen)
{ return result; }
else //startIndex 《 byteLen
{
int AllLen=startIndex+len;
int byteCountStart=0;// 记录读取进度
int byteCountEnd=0;// 记录读取进度
int startpos=0;// 记录截取位置
int endpos=0;// 记录截取位置
for(int i=0;i《charLen;i++)
{
if(Convert.ToInt32(str.ToCharArray())》255)// 按中文字符计算加2
{ byteCountStart+=2; }
else// 按英文字符计算加1
{ byteCountStart+=1; }
if(byteCountStart》startIndex)// 超出时只记下上一个有效位置
{
startpos=i;
AllLen=startIndex+len-1;
break;
}
else if(byteCountStart==startIndex)// 记下当前位置
{
startpos=i+1;
break;
}
}
if(startIndex+len《=byteLen)//截取字符在总长以内
{
for(int i=0;i《charLen;i++)
{
if(Convert.ToInt32(str.ToCharArray())》255)// 按中文字符计算加2
{ byteCountEnd+=2; }
else// 按英文字符计算加1
{ byteCountEnd+=1; }
if(byteCountEnd》AllLen)// 超出时只记下上一个有效位置
{
endpos=i;
break;
}
else if(byteCountEnd==AllLen)// 记下当前位置
{
endpos=i+1;
break;
}
}
endpos=endpos-startpos;
}
else if(startIndex+len》byteLen)//截取字符超出总长
{
endpos=charLen-startpos;
}
if(endpos》=0)
{ result=str.Substring(startpos,endpos); }
}
return result;
}
调用:
string s="一二3456七八";
s=CutByteString(s,2,5);
MessageBox.Show(s); //输出"二345"共5个字节
参考:
***隐藏网址***

更多文章:
intellij idea登录(intellij idea15怎么进入一开始的配置页面)
2025年11月12日 09:15
编程r是什么意思啊(数控编程r,w,s,t,n,h是什么意思)
2026年2月23日 04:15
特效视频软件能把人隐身了(关于制作一个人从视频中消失的特效)
2026年4月7日 10:30
javaee三层架构(javaee三层架构写假删除和修改状态代码)
2025年6月25日 15:45
shell电面四大问题(Shell评估中心最后一面面试技巧)
2025年9月9日 08:00
mod指令汇编语言(方舟生存进化洪荒神话MOD代码大全实用指令分享)
2025年9月4日 23:00
editorial assignment需要多久(英国论文Group Assignment如何写作求写作辅导)
2026年7月11日 22:45
















