c++,将字符以类似十六进制格式的内容保存到文本

如上图所示,我想把a1、a2转换成a3的这种形式,然后把转换后的内容保存到文件中,保存后效果如下图实现语言是c++烦请诸位大拿,在我上面的代码片段的基础上帮我一下吧补充:... 如上图所示,我想把a1、a2转换成a3的这种形式,然后把转换后的内容保存到文件中,保存后效果如下图

实现语言是c++
烦请诸位大拿,在我上面的代码片段的基础上帮我一下吧
补充:单纯把a3保存到文件我会,我希望的是从a1和a2转换成类似a3的步骤、思路和代码,
多谢诸位
展开
 我来答
百度网友62efd0c
2014-11-05 · TA获得超过405个赞
知道小有建树答主
回答量:854
采纳率:0%
帮助的人:616万
展开全部
直接用sprintf把对应的保存到字符串,在把字符串写入文件就好了。
char a[100]; //待写入字符
int i;
char tmp[4]; //转换后的临时
char str[1000]; //转换后的
str[0]=0;
for (i = 0; i < 100;i++)
{
sprintf(tmp, "%02x ", a[i]);

strcat(str, tmp);

}
//向文件写入str
...
追问
兄弟,可能我没说清楚,我想要的是把两个字符串合并后,达到我截图的那个效果,你的回答貌似不行啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-11-05
展开全部
unsigned char hex(char h,char l){
    int ret;
    char x[3]={h,l,0};
    sscanf(x,"%x",&ret);
    return (unsigned char)ret;
}

unsigned char hex2(char h,char l){
    h = (h>='0' && h<='9')?(h-'0'):((h>='a' && h<='f')?(h-'a'+10):(h-'A'+10));
    l = (l>='0' && l<='9')?(l-'0'):((l>='a' && l<='f')?(l-'a'+10):(l-'A'+10));
    return ((h<<4)|l);
}

int main(){
    char a1='E',a2='9';
    unsigned char a3=hex(a1,a2);//hex2(a1,a2)
}

 两种方法都行

更多追问追答
追问
兄弟,感觉你的第二个方法与二楼的那个哥们的有些类似,但是ta做了一次按位与,你代码中的第11行不需要做以下按位或吗?
如果我没能选你这个成为最终答案,我会新开个帖子,同样的分数给你,
目的就是想请你大致帮我说一下你的思路,
一点分数不成敬意,多谢!!
追答
分倒是无所谓。
第一个方法的思路是:形成一个字符串利用现有的sscanf将该字符串当作16进制数据读到int型的变量里;由于只有两个字符,所以数值一定不会大于255,也就是说不需要按位与;

第二个方法的思路是:将每个以字符形式表达的数值转换为数值型,然后将高4位数据向左移4位再与低4位进行按位或操作。如果输入参数取值正常,那么不需要按位与,因为“将每个以字符形式表达的数值转换为数值型”得到的结果只有低4位有效,高4位必定为0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
推荐于2016-07-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6480万
展开全部
#include <stdio.h>
int main()
{
char a1,a2,a3;
a1='E' ;
a2='9' ;
a1 = a1-'A'+10 ;
a2 -= '0' ;
a1 <<= 4 ;
a3= (a1&0xf0)|(a2&0x0f);
printf("%x\n", a3 );
return 0;
}
更多追问追答
追问
兄弟,保存后的内容是我想要的,但不是很明白,能否帮我大致说一下下面的原理啊
a1 = a1-'A'+10 ; //取asic码值?
a2 -= '0' ;
a1 <<= 4 ; //为什么要向左移位4次,移到高4位的目的是啥
a3= (a1&0xf0)|(a2&0x0f); //这两个按位与分别试啥意思啊

多谢!新手。。
追答
a1 = a1-'A'+10 ;    //获得十六进制E所对应的整数值(14),这样a1的二进制就是00001110

a2 -= '0' ; //获得'9'所对应的整数值(9),这样a2的二进制就是00001001
很明显,我们想要的结果 E9分别是a1的后四位和 a2的后四位,这两个四位组合时,a1的在前,a2的在后。

a1 <<= 4 ; 把1110前移,a1变成11100000
a3= (a1&0xf0) | (a2&0x0f);

a1&0xf0 为保证低位是0,高位不变
a2&0x0f为保证高位是0,低位不变 属于冗余的保护措施。
这样 11100000 | 00001001 = 11101001=E9
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式