C语言强制转化指针类型的问题
我想把一个int类型的4个字节中的高4位和低4位分别输出。所以弄了个char类型的指针指向这个数,想依次输出4个字节的高4位和低4位。但是找不出下面代码有什么逻辑bug#include <stdio.h>
int main()
{
long i;
int j;
int array1,array2;
printf("请输入i\n");
scanf("%d",&i);
char *p=(char *)&i;
for(j=0;j<4;j++) {
array1=(*(p+j)>>4);
}
for(j=0;j<4;j++)
{
array2=((*(p+j)<<4)>>4);
}
printf("高四位分别是:\n");
for(j=0;j<4;j++)
{
printf("%x ",array1);
}
printf("\n低四位分别是:\n");
for(j=0;j<4;j++)
{
printf("%x ",array2);
}
return 0;
} int main()
{
long i;
int j;
int array1 = { 0 }, array2 = {0};
printf("请输入i\n");
scanf("%d", &i);
char p = {0};
for (j = 0; j<4; j++) {
array1 = ((i>>(j*4)) & 0xf);
}
for (j = 0; j<4; j++)
{
array2 = (((i >> ((4+j)*4))) & 0xf);
}
printf("高四位分别是:\n");
for (j = 3; j>=0; j--)
{
printf("%x ", array2);
}
printf("\n低四位分别是:\n");
for (j = 3; j >= 0; j--)
{
printf("%x ", array1);
}
return 0;
}
这个感觉没有必要强转 ,直接对int型进行操作就行我改了下你看行不 北冰羊 发表于 2020-12-4 14:52
int main()
{
long i;
我感觉你的逻辑也有点不对,你输入一个四位数看看运行正确没。我觉得改成 array1 = ((i>>(j*8)) & 0xf);
array2 = (((i >> (4+j*8))) & 0xf);
这样就可以,不过我想熟悉指针的操作,想用指针来做 取什么名字好… 发表于 2020-12-4 16:02
我感觉你的逻辑也有点不对,你输入一个四位数看看运行正确没。我觉得改成 array1 = ((i>>(j*8)) & 0 ...
int 4个字节32位所以每次移动4位是一个16进制位 int main()
{
long i;
int j;
int array1, array2;
printf("请输入i\n");
scanf("%d", &i);
char *p = (char *)&i;
for (j = 0; j<4; j++)
{
printf("%x ", (p&0xff));
}
return 0;
}
这样可以直接输出int型的4个字节,但是你的要求是高四位,第四位,需要再把字节开成两个16进制位 北冰羊 发表于 2020-12-4 16:21
int main()
{
long i;
为什么输入1 输出是1 0 0 0,而不是 0 0 0 1
搞不懂 取什么名字好… 发表于 2020-12-4 16:41
为什么输入1 输出是1 0 0 0,而不是 0 0 0 1
搞不懂
电脑大小端问题,小端对齐是先输出地位,大端对齐先输出高位,你那应该是小端对齐 噢噢谢谢
页:
[1]