我得到Big Endian格式的输出

时间:2011-01-05 05:36:16

标签: c

#include <stdio.h>
int main()
{
    int num, i = 0,pos;
    printf(" Enter num \n");
    scanf("%d",&num);
    for( i = 0; i < 31; i++ )
    {   
        pos = 1 << i;

        if ( num & pos )
            printf("1");
        else
            printf("0");

    }   
    printf("\n");
    return 0;
}

/*
O/P
Enter Num
12
0011000000000000

*/

但我想将o / p打印为0000000000001100 那么,我必须做出哪些改变才能得到理想的o / p

3 个答案:

答案 0 :(得分:1)

您首先打印最不重要的位。将for循环更改为倒计时:

      for (int i = 31; i >= 0; i--)

答案 1 :(得分:0)

修改: 似乎我是那个忽视期望输出的人。因此,其他人提供的解决方案将适用于OP。


我很惊讶人们忽略了这样一个事实,即字节序通常适用于字节级而不是位,这使得普通的基于索引的循环无法提供所需的输出。

对于十进制到大端字节,您需要:

while (num)
{
    big <<= 8;
    big |= num & 0xFF;
    num >>= 8;
}

因此,为了将little-endian整数输出到big-endian二进制文件中,您需要:

// 'num' was 4-byte (int) data in little-endian format
while (num)
{
    // select required byte block
    unsigned char curByte = num & 0xFF;

    // prints the byte binaries
    for(int iBit=7; iBit>=0; --iBit)
    {
        unsigned char theBit = curByte >> iBit;
        if (theBit & 0x1)
            putchar('1');
        else
            putchar('0');

    }

    // shifts to next byte block
    num >>= 8;
}

答案 2 :(得分:-1)

for循环更改为:

#define BIT(x) (1U << (x))

for (i = 31; i >= 0; --i)
{
    if (x & BIT(i)) {
        putchar('1');
    }
    else {
        putchar('0');
    }

}