读书人

字符串格式转化解决方法

发布时间: 2012-04-03 12:38:19 作者: rapoo

字符串格式转化
有一段字符串char* a,如“6f36323d313536303030......”其实它隐含着十六进制信息。比如3f对应于char是‘o’,对应于整形是63,其ascii是6f。36对应char是‘6’,对于整形是54,其ascii是36。

现要将这个字符串压缩成另一个字符串char* b;如上面的char* b应该是 "o62=156000...... ",请问具体怎么实现。

我知道在内存中整形和字符型是一样的。如(int) 48 就是 (char)‘0’
也可以用类似sscanf(strbuf, "%2d ", &k),转化成整形,在用十位乘16+个位的形式计算;输出字符便可以得到如‘0’~‘9’间的字符数据。但是如果出现字母的话便不能处理。如遇到6f,3d, 该怎么办?

我讲清楚了吧?


[解决办法]
转化成为字符串的话,表示范围最大256 用十六进制表示的话最多2位, 也就是说每两位转化成对应的字符。 这个需要自己来写。

就是读 char * a 每读两位然后转一次,然后放到b字符串中 即可



[解决办法]
#include <stdio.h>

int main()
{
char str[] = "6f36323d313536303030 ";
char *p;
char ch;
char result[20];
int i = 0;

for(p=str; *p; p+=2)
{
sscanf(p, "%2x ", &ch);
result[i++] = ch;
}
result[i] = '\0 ';
puts(result);

return 0;
}

这样行否??
[解决办法]

int k;

sscanf(strbuf, "%2x ", &k),
[解决办法]
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *a= "6f36323d313536303030 ";
char *ptr,buf[3];
int i,len=0;;
char b[128];
ptr=a;
memset(b,0,sizeof(b));
while(ptr)
{
memset(buf,0,sizeof(buf));
strncpy(buf,ptr,2);
i=strtol(buf, (char **)NULL, 16);
printf( "%s\n ",buf);
memset(buf,0,sizeof(buf));
sprintf(buf, "%c ",i);
strcat(b,buf);
ptr+=2;
len+=2;
if(len> strlen(a))break;
}
printf( "%s\n ",b);
}

读书人网 >C语言

热点推荐