字符串所占的字节长度

简介: /*在C#中字符串"中国人民zgrm"的Length=8,即一个汉字只占一个长度;但有时候为了格式化输出的需要,我们期望得到字符串所占的字节长度,即一个汉字占两个长度,"中国人民zgrm"的长度应该为12(=4个汉字*2+4个英文字符).

/*
在C#中字符串"中国人民zgrm"的Length=8,即一个汉字只占一个长度;
但有时候为了格式化输出的需要,我们期望得到字符串所占的字节长度,即
一个汉字占两个长度,"中国人民zgrm"的长度应该为12(=4个汉字*2+4个英文字符).
以下两个函数就用于解决这个问题.
这是根据以前看到的一个JS函数改写的.见笑了.
*/
/// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:字符串的字节长度 </td></tr>
  /// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>
  /// <tr><td><b>创建时间</b>:2005-07-16 </td></tr>
  /// </table>
  /// </summary>

  /// <param name="str">字符串</param>
  /// <returns>字符串的字节长度</returns>

  static public int TrueLength(string str)
  {
   int lenTotal = 0;
   int n = str.Length;
   string strWord = "";
   int asc;
   for(int i=0;i<n;i++)
   {
    strWord = str.Substring(i,1);    
    asc = Convert.ToChar(strWord);
    if ( asc < 0 || asc > 127 )
     lenTotal = lenTotal + 2;
    else
     lenTotal = lenTotal + 1;
   }

   return lenTotal;
  }
  /// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:填充或截断原始字符串为指定长度 </td></tr>
  /// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>
  /// <tr><td><b>创建时间</b>:2005-07-16 </td></tr>
  /// </table>
  /// </summary>
  /// <param name="strOriginal">原始字符串</param>
  /// <param name="maxTrueLength">字符串的字节长度</param>
  /// <param name="chrPad">填充字符</param>
  /// <param name="blnCutTail">字符串的字节长度超过maxTrueLength时截断多余字符</param>
  /// <returns>填充或截断后的字符串</returns>
  static public string PadRightTrueLen(string strOriginal,int maxTrueLength,char chrPad,bool blnCutTail)
  {
   string strNew = strOriginal;
   
   if (strOriginal==null || maxTrueLength<=0)
   {
    strNew = "";
    return strNew;
   }

   int trueLen = TrueLength(strOriginal);
   if (trueLen>maxTrueLength)//超过maxTrueLength
   {
    if (blnCutTail)//截断
    {
     for(int i=strOriginal.Length-1; i>0; i--)
     {
      strNew = strNew.Substring(0,i);
      if (TrueLength(strNew) == maxTrueLength)
       break;
      else if (TrueLength(strNew) < maxTrueLength)
      {
       strNew += chrPad.ToString();
       break;
      }
     }
    }
   }
   else//填充
   {
    for(int i=0;i<maxTrueLength-trueLen;i++)
    {
     strNew += chrPad.ToString();
    }
   }

   return strNew;
  }

目录
相关文章
|
人工智能 运维 数据处理
创新场景丨大模型初创公司出海,云计算护航
开启全球化征程的企业需要的不仅是优秀的技术产品,还有成熟的服务体系,让企业更专注业务突围,无后顾之忧。
|
5月前
|
存储 自然语言处理 API
淘宝商品评论API接口的使用流程
淘宝商品评论API接口使用流程
|
9月前
|
传感器 自然语言处理 前端开发
体验通义灵码 2.5 版编程智能体
在当今快速发展的技术环境中,软件开发正经历着前所未有的变革。传统的编程方式往往需要开发者具备深厚的技术背景和丰富的实践经验,但随着人工智能技术的进步,这种局面正在被打破。通义灵码 2.5 版作为阿里云推出的一款先进的编程智能体,凭借其强大的自主决策、环境感知和工具使用能力,为开发者提供了一种全新的编程体验,使得从零开始构建应用程序变得更加简单高效。
|
人工智能 IDE 大数据
富滇银行研发管理从数字化走向智能化 | 通义灵码企业标杆案例
近年来,富滇银行以打造本土优秀数字化银行为目标,努力通过数字技术实现规模、质量、效益全方位的高质量发展。自2021年5月富滇银行数字化转型全面启动以来,凭借其模式创新、数字化成熟度、市场影响力和社会价值,“滇峰计划”斩获18项重磅奖项,涵盖金融创新、手机银行、云计算、大数据和ESG等领域,并入选多个国内数字化转型权威案例库。
541 35
|
人工智能 测试技术
LlamaV-o1:全能多模态视觉推理模型,推理得分超越其他开源模型,推理速度翻5倍
LlamaV-o1 是一款多模态视觉推理模型,通过逐步推理学习方法解决复杂任务,支持透明推理过程,适用于医疗、金融等领域。
331 16
LlamaV-o1:全能多模态视觉推理模型,推理得分超越其他开源模型,推理速度翻5倍
|
前端开发 容灾 安全
Docker Swarm 共享卷
Docker Swarm 共享卷
892 0
淘宝批量复制宝贝提示“当前类目大于48小时发货的发货时间不能大于15天,请调整”怎么解决?
要复制这个宝贝上传到淘宝店铺,只需要重新复制一次,然后在大淘营淘宝宝贝复制专家下载配置的第二步,选择一个小于或等于15天的发货时间(见下图),这样就可以复制宝贝上传到淘宝店铺了。
|
存储 算法 安全
深入浅出:用C++实现二叉堆的艺术
深入浅出:用C++实现二叉堆的艺术
475 0
|
算法 Java C++
【C/C++ 内存知识扩展】内存不足的可能性分析
【C/C++ 内存知识扩展】内存不足的可能性分析
332 0
|
消息中间件 Kafka Python
排查实时tail功能cpu占用过高问题
开发实时log功能时碰到的一些问题
5070 0