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,这是为什么啊? 展开
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,这是为什么啊? 展开
6个回答
展开全部
写的代码好高深啊,
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这样的系统却是小尾系统,做的事情刚好想法,所以你的程序在不同系统中编译出来结果还会不一样。
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这样的系统却是小尾系统,做的事情刚好想法,所以你的程序在不同系统中编译出来结果还会不一样。
展开全部
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的值。
{
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的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个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
你可以转换之后,进行相加,然后复制给字符数组
这是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
你可以转换之后,进行相加,然后复制给字符数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char最大为128 也就是0x80 只要最后两位大于80都会直接全打印 因为认不出char 小于80就原样打印char 不满位的补零
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是00000078;0078
在这里*b相当于做了一次强制转换,其结果是0x78
所以他的结果等同于printf("%08x,%04x",char(a),char(a));
在这里*b相当于做了一次强制转换,其结果是0x78
所以他的结果等同于printf("%08x,%04x",char(a),char(a));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询