c++ int转换成char 10

unsignedinta=0x1234678;char*b=(char*)&a;printf("%08x,%04x",*b,*b);结果是多少?问题的运行结果为:0x01... unsigned int a=0x1234678;
char *b=(char *)&a;
printf("%08x,%04x",*b,*b);
结果是多少?
问题的运行结果为:0x01234678,0078下面这个程序#include<stdio.h>
void main()
{
unsigned int a=0xfffffff7;
unsigned char i=(unsigned char)a;
char*b=(char*)&a;
printf("%08x,%04x\n",i,*b);
}
运行结果
000000f7,fffffff7 不知道*b是怎么回事啊,求解惑~
unsigned int a=0x12345678;a的值换一下,结果00000078,0078,这是为什么啊?
展开
 我来答
mo6830968
2012-10-04 · 超过18用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:40.7万
展开全部
写的代码好高深啊,
unsigned char i=(unsigned char)a;这一句是吧a变量当成是unsigned char 类型(长度为一个字节,就是8位,能表示范围从0-255(0x00-0xff)),而在printf把它打印的是用的是%08x,应该是按十六进制输出,当成一个int类型的数,而i只有一个字节长度,所以用符号位(0)填。至于08记不太清了。

char *b=(char*)&a;这一句是取a的地址然后解引用为指向char类型的指针,但其实内存内在没有发生任何变化,所以当使用prinf把它输出,应该%x最后还是会把*b内容当成int*因为你没用%c这一个转换(不确定是这么叫么)。

还有最后一点,很重要的,您的程序在不同的操作系统底下编译出来应该也会不一样,例如windows操作系统是大尾的系统,它会把数据的高字节放在连续储存区域的首位,而Linux这样的系统却是小尾系统,做的事情刚好想法,所以你的程序在不同系统中编译出来结果还会不一样。
zhangdebo321
2012-10-03 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:197万
展开全部
void main()
{
unsigned int a=0xfffffff7;
unsigned char i=(unsigned char)a;
char*b=(char*)&a;
printf("%08x,%04x\n",i,*b);
}
对于这个程序,i只相当于做了一个强制转化,由于unsigned char只有8位,所以截取了最低位16进制的f和7即8位。对于*b,这样理解,考虑赋值语句*b = &a;则b是a内存中的地址即指针,*b是此地址上的值。加上一个强制转换(char *)的意思是将改地址转换为char类型的地址,并不会截取,所以*b会取得a的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
此生我独醉
2012-10-05 · 超过32用户采纳过TA的回答
知道答主
回答量:181
采纳率:0%
帮助的人:87.8万
展开全部
这个a转换到字符类型越界了

这是msdn中的整数转换到字符串的说明:
_itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow
Convert an integer to a string.
char*_itoa(intvalue,char*string,intradix);
char *_i64toa(__int64value,char*string,intradix);
char*_ui64toa(unsigned_int64value,char*string,intradix);
wchar_t*_itow(intvalue,wchar_t*string,intradix);
wchar_t*_i64tow(__int64value,wchar_t*string,intradix);
wchar_t*_ui64tow(unsigned __int64value,wchar_t*string,intradix);
Routine Required Header Compatibility
_itoa <stdlib.h> Win 95, Win NT
_i64toa <stdlib.h> Win 95, Win NT
_ui64toa <stdlib.h> Win 95, Win NT
_itow <stdlib.h> Win 95, Win NT
_i64tow <stdlib.h> Win 95, Win NT
_ui64tow <stdlib.h> Win 95, Win NT
你可以转换之后,进行相加,然后复制给字符数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
158******46
2013-01-08
知道答主
回答量:1
采纳率:0%
帮助的人:1543
展开全部
char最大为128 也就是0x80 只要最后两位大于80都会直接全打印 因为认不出char 小于80就原样打印char 不满位的补零
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友76bc4363f
2012-10-03 · TA获得超过1019个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:258万
展开全部
结果是00000078;0078
在这里*b相当于做了一次强制转换,其结果是0x78
所以他的结果等同于printf("%08x,%04x",char(a),char(a));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式