取什么名字好… 发表于 2020-12-4 13:59:56

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;
}

北冰羊 发表于 2020-12-4 14:52:01

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 16:02:35

北冰羊 发表于 2020-12-4 14:52
int main()
{
        long i;


我感觉你的逻辑也有点不对,你输入一个四位数看看运行正确没。我觉得改成 array1 = ((i>>(j*8)) & 0xf);
array2 = (((i >> (4+j*8))) & 0xf);
这样就可以,不过我想熟悉指针的操作,想用指针来做

北冰羊 发表于 2020-12-4 16:10:02

取什么名字好… 发表于 2020-12-4 16:02
我感觉你的逻辑也有点不对,你输入一个四位数看看运行正确没。我觉得改成 array1 = ((i>>(j*8)) & 0 ...

int 4个字节32位所以每次移动4位是一个16进制位

北冰羊 发表于 2020-12-4 16:21:07

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:41:21

北冰羊 发表于 2020-12-4 16:21
int main()
{
        long i;


为什么输入1 输出是1 0 0 0,而不是 0 0 0 1
搞不懂

北冰羊 发表于 2020-12-4 16:52:55

取什么名字好… 发表于 2020-12-4 16:41
为什么输入1 输出是1 0 0 0,而不是 0 0 0 1
搞不懂

电脑大小端问题,小端对齐是先输出地位,大端对齐先输出高位,你那应该是小端对齐

取什么名字好… 发表于 2020-12-4 21:40:03

噢噢谢谢
页: [1]
查看完整版本: C语言强制转化指针类型的问题