c++,将字符以类似十六进制格式的内容保存到文本
如上图所示,我想把a1、a2转换成a3的这种形式,然后把转换后的内容保存到文件中,保存后效果如下图实现语言是c++烦请诸位大拿,在我上面的代码片段的基础上帮我一下吧补充:...
如上图所示,我想把a1、a2转换成a3的这种形式,然后把转换后的内容保存到文件中,保存后效果如下图
实现语言是c++
烦请诸位大拿,在我上面的代码片段的基础上帮我一下吧
补充:单纯把a3保存到文件我会,我希望的是从a1和a2转换成类似a3的步骤、思路和代码,
多谢诸位 展开
实现语言是c++
烦请诸位大拿,在我上面的代码片段的基础上帮我一下吧
补充:单纯把a3保存到文件我会,我希望的是从a1和a2转换成类似a3的步骤、思路和代码,
多谢诸位 展开
3个回答
展开全部
直接用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
...
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询