如何打印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三种类型数据在内存中所占的字节数由啥决定