c#按字节截取字符串c#按字节截取字符串
///
/// 截取指定字节长度的字符串
///
/// 原字符串
/// 截取字节长度 /// public static string CutByteString(string str, int len)
{
string result = string.Empty;// 最终返回的结果
if (string.IsNullOrEmpty(str)) { return result; }
int byteLen = System.Text.Encoding.Default.Get...
c#按字节截取字符串
///
/// 截取指定字节长度的字符串
///
///
原字符串
///
截取字节长度 ///
public static string CutByteString(string str, int len)
{
string result = string.Empty;// 最终返回的结果
if (string.IsNullOrEmpty(str)) { return result; }
int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
int charLen = str.Length;// 把字符平等对待时的字符串长度 int byteCount = 0;// 记录读取进度
int pos = 0;// 记录截取位置
if (byteLen > len)
{
for (int i = 0; i < charLen; i++) {
if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2 { byteCount += 2; }
else// 按英文字符计算加1
{ byteCount += 1; }
if (byteCount > len)// 超出时只记下上一个有效位置
{
pos = i;
break;
}
else if (byteCount == len)// 记下当前位置
{
pos = i + 1;
break;
}
}
if (pos >= 0)
{ result = str.Substring(0, pos); }
}
else
{ result = str; }
return result;
}
///
/// 截取指定字节长度的字符串
///
///
原字符串
///
起始位置 ///
截取字节长度
///
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()[i]) > 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()[i]) > 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;
}
本文档为【c#按字节截取字符串】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。