首页 > 编程知识 正文

全半角转换是什么意思,c语言全角半角

时间:2023-05-05 20:07:35 阅读:242442 作者:162

int full2half(char *str_half, int len_half, char *str_full, int len_full, int mode )
{
    int i = 0;
    int j = 0;
    
    if ( mode == 0 )/*半角转全wqdbm/
    {
        i=0;
        j=0;
        while('' != str_half[i])
        {
            if(j>=len_full)
            {
                return -1; /*全角字符缓冲区空间不够*/
            }
            /*控制符0x00-0x1E(0-31)*/
            if(0x00<=(str_half[i]&0xff) && 0x1F>=(str_half[i]&0xff))
            {
            /*换行、回车*/
                if(0x0A==(str_half[i]&0xff)||0x0D==(str_half[i]&0xff))
                {
                    str_full[j]=str_half[i];
                    j++;
                    i++;
                    continue;
                }
                else
                {
                    i++;
                    continue;
                }
            }
            /*半角空qsdxt/
            if(str_half[i] == 0x20) 
            { 
                str_full[j] = 0xA1;
                str_full[j+1] = 0xA1;
                j+=2; 
                i+=1;
                continue;
            }
            /*半角字糟糕的发夹/
            if(str_half[i]>=0x20 && str_half[i]<=0x7E)
            {
                str_full[j] = 0xA3;
                str_full[j+1] = str_half[i]+0x80;
                j+=2; 
                i+=1;
                continue;
            }
           /*全角字符,汉字,原样拷dddds/
           else
           {
              if((str_half[i]&0xff) >= 0xA1 && (str_half[i]&0xff) <= 0xFE)
              {
                  str_full[j] = str_half[i];
                  str_full[j+1] = str_half[i+1];          
                   j+=2;
                   i+=2;             
              }
              else
              {
                  str_full[j] = str_half[i];
                  j++;
                  i++;
              }                                  
           }
            
        }
    }
    else if ( mode == 1 )/*全角转半wqdbm/
    {       
        i=0;
        j=0;
        while('' != str_full[i])
        {
            if(j>=len_half)
            {
                return -1; /*半角字符缓冲区空间不够*/
            }
            /*控制符0x00-0x1E(0-31)*/
            if(0x00<=(str_full[i]&0xff) && 0x1F>=(str_full[i]&0xff))
            {
            /*换行、回车*/
                if(0x0A==(str_full[i]&0xff)||0x0D==(str_full[i]&0xff))
                {
                    str_half[j]=str_full[i];
                    j++;
                    i++;
                    continue;
                }
                else
                {
                    i++;
                    continue;
                }
            }
            /*半角字符0x20-0x7E(32-126)*/
            if(0x20<=(str_full[i]&0xff) && 0x7E>=(str_full[i]&0xff))
            {
                str_half[j]=str_full[i];
                j++;
                i++;
                continue;
            }
         
            /*全角空qsdxt/
            if((str_full[i]&0xff) == 0xA1 && (str_full[i+1]&0xff) == 0xA1) 
            { 
                str_half[j] = 0x20;
                j++; 
                i+=2;
                continue;
            }
            /*汉字+全角字糟糕的发夹/
            else if((str_full[i]&0xff) >= 0xA1 && (str_full[i]&0xff) <= 0xFE && (str_full[i+1]&0xff) >= 0xA1 && (str_full[i+1]&0xff) <= 0xFE)    
            {
                /*全角字糟糕的发夹/
                if((str_full[i]&0xff) == 0xA3)
                {
                 str_half[j] = str_full[i+1] - 0x80;
                 j++;
                 i+=2;
                 continue;
                }
                /*汉hsddy/
                else
                {
                    str_half[j] = str_full[i];
                   str_half[j+1] = str_full[i+1];          
                    j+=2;
                    i+=2;
                    continue;
                }
            }
           else
           {
               str_half[j] = str_full[i];         
               j++;
               i++; 
               continue;                                                        
           }
        } 
    }
    else
    {
        return -2; /*转换模式选择错误*/
    }
    return 0;
}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。