• 字符串所占的字节长度


    /*
    在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;
      }

  • 相关阅读:
    smarty对网页性能的影响
    php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?
    为什么日志记录到别的目录了?
    一个空格引发的bug
    linux内核--页高速缓存
    radix树
    linux内核--用户态内存管理
    linux内核--内核内存管理
    linux内核--软中断与tasklet
    linux内核--几个上下文(context)
  • 原文地址:https://www.cnblogs.com/SummerRain/p/217573.html
Copyright © 2020-2023  润新知