| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1992 人关注过本帖
标题:字符替换
只看楼主 加入收藏
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
字符替换
char a[]="\'c4\'e3\'c3\'c7\'ba\'c3";怎么将转义字符\'转成\x,变成下面数组b
char b[]="\xc4\xe3\xc3\xc7\xba\xc3";
我试过,单独写'\x'系统编译不过去,怎么处理呢?

#include <stdio.h>

void main()
{
    char a[]="\'c4\'e3\'c3\'c7\'ba\'c3";
    char b[]="\xc4\xe3\xc3\xc7\xba\xc3";
    int i;

    for(i=0;a[i];i++)
        if(a[i]=='\'')
            b[i]='\x';//error C2153: hex constants must have at least one hex digit
        else
            b[i]=a[i];
            printf("ok\n");
    printf("%s\n",b);

}
搜索更多相关主题的帖子: least 
2011-03-18 10:47
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:2 
看来只能 \'c4 整体替换了
\'32 ---> '2'
2011-03-18 11:10
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
这样试一试吧。
程序代码:
root@~ #cat 1.c
#include <stdio.h>

int main (void) {

        char a[]="\\'c4\\'e3\\'c7\\'ba\\'c3";
        int len=0,i,j;

        while(a[len]!='\0') {
                len++;
        }

        char b[len];

        for(i=0,j=0;a[i]!='\0';i++,j++) {
                if(a[i]=='\'') {
                        b[j]='x';
                }
                else{
                        b[j]=a[i];

                }
        }

        printf ("%s\n%s\n",a,b);

        return 0;

}

测试:
root@~ #./1
\'c4\'e3\'c7\'ba\'c3
\xc4\xe3\xc7\xba\xc3
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-18 11:16
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
回复 3楼 ansic
恩,这也是个解决办法,看来要先把\'先替换成\\'在处理下。我在试试下。

帮人《---》帮己
2011-03-18 12:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
char a[]="\'c4\'e3\'c3\'c7\'ba\'c3";怎么将转义字符\'转成\x,变成下面数组b
char b[]="\xc4\xe3\xc3\xc7\xba\xc3";

------ 就是将 ' 替换成 \x 呗,' 在C中'用 "\'" 表示,\x用 "\\x" 表示

2011-03-18 12:09
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
楼主仔细阅读一下书里关于转义字符方面! 在C里,\'表示一个字符, 如同\n,\t,..如果要表示这【两个】字符, 就必须在前面加一个\,\\'表示的是两个字符\'

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-18 12:39
dingdaerwxl
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2011-3-17
收藏
得分:4 
提示信息是 十六进制数必须包含至少有一个十六进制数字  b[i]='\x'就可能认为是2个字符了
2011-03-18 12:42
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
回复 5楼 rjsp
char b[]="\xc4\xe3\xc3\xc7\xba\xc3"; printf("%s\n",b)输出是你们好 3个汉字
char b[]="\\xc4\\xe3\\xc3\\xc7\\xba\\xc3"; printf("%s\n",b)输出是\xc4\xe3\xc3\xc7\xba\xc3
我的意思是让\xc4是一个十六进制转义字符,而不是\\xc4 4个字符
原始的字符串是\'c4\'e3\'c3\'c7\'ba\'c3,目的要转换成6个十六进制转移字符。

[ 本帖最后由 逐渐学习 于 2011-3-18 15:01 编辑 ]

帮人《---》帮己
2011-03-18 14:59
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
现在倒是有一个方法,就是直接把\'后面的2个字符按十六进制转成一个字符,放到数组b中
#include <stdio.h>

char Change(char h,char l)//2个字符转换成一个字符
{
    char c='\0';

    if(h>='0'&&h<='9')//0~9
        c=(h-'0')*16;
    if(h>='a'&&h<='f')//a~f
        c=(h-'a'+10)*16;

    if(l>='0'&&l<='9')
        c=c+(l-'0');
    if(l>='a'&&l<='f')
        c=c+(l-'a'+10);
    return c;
}
int main()
{
    char a[]="\'c4\'e3\'c3\'c7\'ba\'c3";
    char b[20];
    int i=0,j=0;
    while(a[i])
    {
        if(a[i]=='\'')
        {
            i++;
            continue;
        }
        else
        {
            b[j++]=Change(a[i],a[i+1]);
            i=i+2;
        }

    }
    b[j]='\0';
   
    printf("%s\n",b);
    return 0;
}

帮人《---》帮己
2011-03-18 19:11
快速回复:字符替换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039648 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved