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

标签 c hex byte printf endianness

我需要在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;
}

输出如下(其中大小=1,长度=10):

31 ED 5E 89 E1 83 E4 F0 50 54

size = 2length = 5 时,我需要输出为:

ED31 895E 83E1 F0E4 5450

(注意小尾数) 我不知何故需要使用大小参数来改变输出,但我不知道如何。 我认为它与 %02x 格式有关,并且我尝试过 %04x 但我得到的是:

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

最佳答案

读取两个字节并执行以下操作:

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

关于c - 如何在C中以十六进制格式打印2或4个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23697090/

相关文章:

c - 仅使用一个字段的结构

javascript - 使用javascript调用外部程序(例如: a C program)

swift - 如何快速计算一个人的赞美的小数?

algorithm - 如何将十进制分数转换为十六进制分数?

c# - 相同的文本具有不同的字节大小

java - 位串 : checking if one bitstring is a subset of another

c - 定义 2 个字节以便于在 C 中使用数组初始化/比较的最佳方法?

c - 有什么工具可以在上层建筑下重构 c 结构吗?

c - 在 C 中写入 Linux sysfs 节点

c - 在C中将十六进制字符转换为int的最短方法?