• 字符串格式转换


    装载:

    http://polaris.blog.51cto.com/1146394/377468/ 

    字符编码具体解释——彻底理解掌握编码知识,“乱码”不复存在

    该遍文章对字符编码有具体的介绍。

    字符集(Charset):是一个系统支持的全部抽象字符的集合。字符是各种文字和符号的总称,包含各国家文字、标点符号、图形符号、数字等。

    字符编码(Character Encoding):是一套法则。使用该法则可以对自然语言的字符的一个集合,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。

    ASCII字符集:主要包含控制字符(回车键、退格、换行键等);可显示字符(英文大写和小写字符、阿拉伯数字和西文符号)。

    ASCII编码:将ASCII字符集转换为计算机能够接受的数字系统的数的规则。

    Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它能够使电脑得以体现世界上数十种文字的系统。(能够这样理解:Unicode是字符集。UTF-32/ UTF-16/ UTF-8是三种字符编码方案。)

    http://blog.sina.com.cn/s/blog_4ed9fbab0101cjsw.html

    C语言字符与ASCII码的互转

    C语言中,字符和其ASCII码是等价的,比方'A'这个字符和单字节整数65是等价的.
    比方char c='A';int a=c;的话,a就是65

    //函 数 名:CharToHex()
    //功能描写叙述:把ASCII字符转换为16进制
    //函数说明:
    //调用函数:
    //全局变量:
    //输 入:ASCII字符
    //返 回:16进制
    /////////////////////////////////////////////////////////////////////
    unsigned char CharToHex(unsigned char bHex){
    if((bHex>=0)&&(bHex<=9))
    bHex += 0x30;
    else if((bHex>=10)&&(bHex<=15))//大写字母
    bHex += 0x37;
    else bHex = 0xff;
    return bHex;
    }
    /////////////////////////////////////////////////////////////////////
    //函 数 名:HexToChar()
    //功能描写叙述:把16进制转换为ASCII字符
    //函数说明:
    //调用函数:
    //全局变量:
    //输 入:16进制
    //返 回:ASCII字符
    /////////////////////////////////////////////////////////////////////
    unsigned char HexToChar(unsigned char bChar){
    if((bChar>=0x30)&&(bChar<=0x39))
    bChar -= 0x30;
    else if((bChar>=0x41)&&(bChar<=0x46))//大写字母
    bChar -= 0x37;
    else if((bChar>=0x61)&&(bChar<=0x66))//小写字母
    bChar -= 0x57;
    else bChar = 0xff;
    return bChar;

      主要是要明确他们之间的数值转换原理就可以编出自己顺手的函数,

    如十进制:

               if((mifare1.sectorpiece[i]>='0') && (mifare1.sectorpiece[i] <='9'))

               {

                     arrcardnum[i]=(mifare1.sectorpiece[i]-'0');

               }

               else if((mifare1.sectorpiece[i]>='A') && (mifare1.sectorpiece[i] <='F'))

               {

                   arrcardnum[i]=(mifare1.sectorpiece[i]-'A' + 10);

               }

    16进制串与ASCII字符串相互转换  

    提供两个函数,方便十六进制串与ASCII 字符串之间的相互转换,使用函数须要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,而且将指向该块的指针 =NULL 
    // 函数输入字符串,输出字符串相应的16进制串
    char *chstohex ( char* chs )
    {
        char hex[16] = { '0', '1', '2', '3', '4', '5', '6', 
            '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F'
        };

        int len = strlen ( chs );
        char* ascii = NULL ;
        ascii = (char*)calloc ( len * 3 + 1, sizeof(char) );            // calloc ascii
        
        int i = 0;
        while( i < len )
        {
            ascii[i*2] = hex[(int)( (char)chs[i] / 16 )] ;
            ascii[i*2 + 1] = hex[(int)( (char)chs[i] % 16 )] ;
            ++i;
        }

        return ascii;                    // ascii 返回之前未释放
    }
    // 函数输入16进制字符串,输出相应的字符串
    char *hextochs ( char* ascii )
    {
        int len = strlen ( ascii ) ;
        if( len%2 != 0 )
            return NULL ;
        char *chs = NULL ;
        chs = (char*)calloc( len / 2 + 1, sizeof(char) );                // calloc chs

        int  i = 0 ;
        char ch[2] = {0};
        while( i < len )
        {
            ch[0] = ( (int)ascii[i] > 64 ) ? ( ascii[i]%16 + 9 ) : ascii[i]%16 ;
            ch[1] = ( (int)ascii[i + 1] > 64 ) ? ( ascii[i + 1]%16 + 9 ) : ascii[i + 1]%16 ;
            
            chs[i/2] = (char)( ch[0]*16 + ch[1] );
            i += 2;
        }

        return chs ;            // chs 返回前未释放
    }



  • 相关阅读:
    20200213 超级聊天术
    20220210 java.util.Properties
    20220210 java.util.concurrent.BlockingQueue 方法说明
    20220210 java.util.Queue
    20220210 java.lang.Long
    20220210 Java 反射基础类
    一组很有意思的Principles
    python logging用法的简单总结
    好好的Typora收费了!_2022_01_20
    一些常用的jQuery方法1_20220128
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7308356.html
Copyright © 2020-2023  润新知