如何打印short int C对象的字节表示[重复]

Posted

技术标签:

【中文标题】如何打印short int C对象的字节表示[重复]【英文标题】:How to print the byte representations of a short int C object [duplicate] 【发布时间】:2012-09-11 22:05:28 【问题描述】:

可能重复:Print an int in binary representation using C

我将如何打印一个短整数的字节表示,并在 C 中加倍。

假设我有一个函数 display_shortInt,我如何让它打印一个短整数的字节表示?我是 C 新手,谢谢!

【问题讨论】:

【参考方案1】:

这个怎么样?

void print_bytes(void *p, size_t len)

    size_t i;
    printf("(");
    for (i = 0; i < len; ++i)
        printf("%02X", ((unsigned char*)p)[i]);
    printf(")");


void print_short(short x)

    print_bytes(&x, sizeof(x));


void print_double(double x)

    print_bytes(&x, sizeof(x));

//etc.

这将以十六进制形式打印构成值的字节,每个字节两个字符。

例如,在 little-endian 机器中,print_short(42) 将打印 (2A00)。在大端机器中,它将是(002A)

【讨论】:

【参考方案2】:

没有直接的方法(即使用 printf 或其他标准库函数)来打印它。您必须编写自己的函数。

void printbits(unsigned int v) 
   for (; v; v >>= 1) 
      putchar('0' + (v & 1));

【讨论】:

【参考方案3】:

如果您想查看它在内存中的组织方式(取决于架构):

short val = 0x1234;
printf( "%02x%02x", ((char*)&val)[0], ((char*)&val)[1] );

如果你只是想看看它是怎么写的(大端):

printf( "%04x", val );

【讨论】:

但请注意,如果char 已签名(并且在许多架构中),并且字节大于0x80,您会得到一些有趣的值。

以上是关于如何打印short int C对象的字节表示[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在c语言中,int,char,short三种类型数据在内存中所占的字节数由啥决定

解释类型转换如何在 C 中从 int 到 short 的位级别工作

C语言里int和short型变量的区别是啥??

int short long有啥区别?

05转换成int

java中的变量各占得字节数