如何在C中以十六进制格式打印2或4个字节

时间:2014-05-16 13:57:18

标签: c hex byte printf endianness

我需要在hexadecimal中以C形式打印字节。我所要做的就是一次打印1个字节,我的程序必须支持1,2或4个字节的选项(大小参数)。 这是我的功能:

void memDisaply(char* filename, int size) {

char sentence [100];
unsigned int str[20];
int length,i;
unsigned char* ptr;

printf("Please enter <address> <length>\n");

fflush(stdin);
fgets(sentence,100,stdin);
fgets(sentence,100,stdin);

    sscanf (sentence,"%x %d",str,&length);
    ptr = (unsigned char*)str;

    for (i=0 ; i< length ; i++) {
        printf ("%02x",(unsigned int)ptr[i]);
    }

    /*reset values*/
    length = 0;
    i = 0;
    ptr = NULL;
}

输出如下(其中size = 1,length = 10):

31 ED 5E 89 E1 83 E4 F0 50 54

我需要在size = 2length = 5时输出结果为:

ED31 895E 83E1 F0E4 5450

(注意little endian) 我不知何故需要使用size参数来改变输出,但我不知道如何。 我认为这与%02x格式有关,我尝试%04x,但我得到的只是:

0031 00ED 005E 0089 00E1 0083 00E4 00F0 0050 0054

1 个答案:

答案 0 :(得分:1)

按两个字节读取两个字节并执行:

printf ("%04x", (unsigned int) ptr[i] | (unsigned int) ptr[i + 1] << 8);