求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码

/// <summary>
/// 求字符串的实际长度(汉字2个字节,外语字符1个字节)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static int Length(string str)
{
    int len = 0;
    char[] arr = str.ToCharArray();
    for (int i = 0; i < arr.Length; i++)
    {
        //汉字
        if (Asc(arr[i].ToString()) == -1)
            len += 2;
        else
            len += 1;
    }

    return len;
}

/// <summary>
/// 重写截取字符串方法,这里的长度是字节数(汉字2个字节,外语字符1个字节)
/// </summary>
/// <param name="str"></param>
/// <param name="length">截取长度(这里的长度是字节数,汉字2个字节,外语字符1个字节)</param>
/// <returns></returns>
public string Substring(string str, int length)
{
    int len = 0;
    char[] arr = str.ToCharArray();
    string strReturn = string.Empty;

    //参数检查
    if (length > Length(str))
        length = Length(str);

    for (int i = 0; i < arr.Length; i++)
    {
        //汉字
        if (Asc(arr[i].ToString()) == -1)
            len += 2;
        else
            len += 1;

        if (len > length)
            break;

        strReturn += arr[i].ToString();
    }

    return strReturn;
}

/// <summary>
/// 字符转ASCII码,如果未能转换为ASCII码返回-1
/// </summary>
/// <param name="character"></param>
/// <returns></returns>
public static int Asc(string character)
{
    if (character.Length == 1)
    {
        //因为汉字和?都被转换为63,所以?进行提前处理
        if (character == "?")
            return 63;

        System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
        int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];

        //如果未能转换为ASCII码(暂且认为为汉字)
        if (intAsciiCode == 63)
            return -1;

        return (intAsciiCode);
    }
    else
    {
        throw new Exception("Character is not valid.");
    }
}

/// <summary>
/// ASCII码转字符
/// </summary>
/// <param name="asciiCode"></param>
/// <returns></returns>
public static string Chr(int asciiCode)
{
    if (asciiCode >= 0 && asciiCode <= 255)
    {
        System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
        byte[] byteArray = new byte[] { (byte)asciiCode };
        string strCharacter = asciiEncoding.GetString(byteArray);
        return (strCharacter);
    }
    else
    {
        throw new Exception("ASCII Code is not valid.");
    }
}

关于ASCII码的转换参考:

http://blog.csdn.net/ldw701/archive/2006/06/01/767875.aspx

 
时间: 2024-10-21 10:47:06

求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码的相关文章

二级 长度为7的字符串除首位外其余五个字符按ascii码进行排序

//编写程序函数的功能为,对长度为7的字符串除首位外其余五个字符按ascii码进行排序 void fun(char *s,int num) { char t; int i,j; for(i=1;i<num-2;i++) for(j=i+1;j<num-1;j++) { if(s[i]<s[j]) { t=s[i]; s[i]=s[j]; s[j]=t; } } }

2016.06.06 周一 C语言 将字符串根据字符的ASCII码从大到小排序并打印出字符串中的字符类型的总数

第一次变量冲突问题 解决了一个多小时,.... 代码如下: ↓ #include<stdio.h> #include<string.h> #define N 200 //输入字符串的最大长度 int main() { //************************输入开始部分******************************** printf("请输入字符串.(长度在200以内)\n\n"); int i=0,j,k,temp,lowLetter

根据字符串长度,计算字符串的高度

CGSize rect1; rect1 = [string boundingRectWithSize:CGSizeMake(kDeviceWidth-40, 20000.f) options:NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading attributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:15.f]

C语言字符串长度(转)

C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试: 1 #include<stdlib.h> 2 #include<string.h> 3 #include<stdio.h> 4 int main() { 5 6 char s1[2

截取指定长度字符串长度代码实例

截取指定长度字符串长度代码实例:字符串的长度在默认状态下往往不能够满足需求,比如新闻列表新闻标题的长度,如果过长往往会引起换行,影响美观度,进而一项用户体验,所以需要根据需要截取字符串长度,下面就分享两端能够实现此功能的代码,希望对大家有所帮助.代码示例如下:一.CSS方式:html代码: <div class="cutText">蚂蚁部落欢迎您,只有奋斗才会有美好的明天!</div> CSS代码: .cutText{ width:150px; height:2

黑马程序员---OC基础9【Foundation框架】【NSString介绍】【NSURL读写字符串】【NSString字符串比较】【NSString前后缀检查及搜索】【NSRange使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [Foundation框架] 1.Foundation框架介绍 1)Foundation框架概念 框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的集合 以便使研发程序变得 更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation 框架 2)Foundation框架的作用 Foundation框架是Mac\iOS中其他框架的基础 Foundat

C# 参数签名字符串按 ASCII码排序,注意其中的坑

参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数字.小写字母.大写字母的顺序排的,实际规则应该是数字.大写字母.小写字母的顺序来排才对.一直使用他在支付宝和微信的接口中都没问题,因为支付宝和微信的单词是用下划线分隔的,今天接入的一家支付公司用的驼峰命名法坑就出现了.正确的打开姿势如下: /// <summary> /// ASCII值排序 //

python中的字符串编码问题——2.理解ASCII码、ANSI码、Unicode编码、UTF-8编码

ASCII码:全名是American Standard Code for Information Interchange,ASCII码中,一个英文字母(不分大小写)占一个字节的空间,范围0x00~0x7f,即0-128. ANSI码:ANSI编码是一种对ASCII码的拓展.ANSI编码用0x00~0x7f 范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符.前126个与ASCII码相同,之后的字符全是某个国家语言的所有字符.容量2的16次

ASP如何计算中英文混合字符串长度和截取字符串

用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际占用的宽度就不好计算了,如果按照Len函数计算的长度来截取字符串截出来的效果也会长短不一,下面是按照一个汉字相当于两个英文字符来计算字符串长度和截取字符串的代码 计算中英文混合字符串的长度: [vb] view plaincopyprint? function getStringLen(str) o