如何打印无符号整数的特定字节?

时间:2015-01-28 04:44:31

标签: c

我试图用C编写程序来检查内存中的字节并打印其内容。给定一个4字节的无符号整数,函数看起来像是以十六进制的形式将整数的特定字节打印到stdout? printf是否具有某种类似内置的功能?

这是我正在寻找的界面。

// number - the integer to be examined
// order - the byte to be examined, with 0 being the lowest-order
//         (first) byte and 3 being the highest order (last) byte
void print_byte(unsigned number, unsigned order);

如果它对实施很重要,那么这将是一个小端机器。

2 个答案:

答案 0 :(得分:0)

请试试这个......

#include <stdio.h>
void print_byte(unsigned number, unsigned order)
{
    unsigned i = 0;

    i = (number >> (8*order)) & 0x000000FF;

    printf("Number:0x%08x, Byte:%02x, Order:%d\n",number,i,order);

    return;
}

int main(void) {

    print_byte(0x1f2e3d4c,0);
    print_byte(0x1f2e3d4c,1);
    print_byte(0x1f2e3d4c,2);
    print_byte(0x1f2e3d4c,3);

    return 0;
}

答案 1 :(得分:0)

如果使用C99或更高版本,请在移位后使用长度修饰符"hh"。此修改器将在打印前将整数转换为unsigned/signed char。根据&#34; byte&#34;的含义使用8或CHAR_BIT

printf("%hhX", number >> (order * 8));

#include <limits.h>
printf("%hhX", number >> (order * CHAR_BIT));