错误版本
#include <stdio.h>
void show_bytes(const char * a, unsigned len)
{
int i;
for( i=0; i<len; i++)
printf("%.2x",*(a+i));
printf("\n");
}
int main(void)
{
short x = 12345;
short mx = -x;
show_bytes(( char *) &x, sizeof(x));
show_bytes(( char *) &mx, sizeof(short));
return 0;
}
因为*(a+i)传递给printf时进行整型提升,而当有符号数进行整型提升时高位填充符号位。所以打印x正确,而打印mx错误
正确版本
#include <stdio.h>
void show_bytes(const unsigned char * a, unsigned len)
{
int i;
for( i=0; i<len; i++)
printf("%.2x",*(a+i));
printf("\n");
}
int main(void)
{
short x = 12345;
short mx = -x;
show_bytes((unsigned char *) &x, sizeof(x));
show_bytes((unsigned char *) &mx, sizeof(short));
return 0;
}