long指针有关问题
long指针问题
我复习时遇到了一个奇怪的问题。
char buffer[ 517 ];
long addr = 0xbffff32a;
long *ptr;
ptr = ( long * )(buffer+20);
*ptr = addr;
printf( "%p\n", buffer[20] );
printf( "%p\n", buffer[21] );
printf( "%p\n", buffer[22] );
printf( "%p\n", buffer[23] );
按说结果应该是0xbf,0xff,0xf3,0x2a吧。可是结果却是0x2a, 0xfffffff3,0xffffffff,0xffffffbf,调试很长时间了,实在想不通为什么,求助大家,谢谢啦
------解决方案--------------------
小端储存: 低地位的字节优先!
所以刚好成了逆序··
------解决方案--------------------
1、WININDOWS平台使用的是小端方案,和网络字节序的大端相反
2、这是因为32位程序,输出指针是长度是32位,
当把printf( "%p\n", buffer[21] ); 中的buffer[21]用%p输出时,因为buffer[21]是char型有符号字符,在以%p指针输出时,会转成32位数,这样0xf3就变成0xfffffff3 这个0xf3对应0xbffff32a红色部分,因为1中的说明。
我复习时遇到了一个奇怪的问题。
char buffer[ 517 ];
long addr = 0xbffff32a;
long *ptr;
ptr = ( long * )(buffer+20);
*ptr = addr;
printf( "%p\n", buffer[20] );
printf( "%p\n", buffer[21] );
printf( "%p\n", buffer[22] );
printf( "%p\n", buffer[23] );
按说结果应该是0xbf,0xff,0xf3,0x2a吧。可是结果却是0x2a, 0xfffffff3,0xffffffff,0xffffffbf,调试很长时间了,实在想不通为什么,求助大家,谢谢啦
------解决方案--------------------
小端储存: 低地位的字节优先!
所以刚好成了逆序··
------解决方案--------------------
1、WININDOWS平台使用的是小端方案,和网络字节序的大端相反
2、这是因为32位程序,输出指针是长度是32位,
当把printf( "%p\n", buffer[21] ); 中的buffer[21]用%p输出时,因为buffer[21]是char型有符号字符,在以%p指针输出时,会转成32位数,这样0xf3就变成0xfffffff3 这个0xf3对应0xbffff32a红色部分,因为1中的说明。