长整数输出为十六进制数的显示问题

怎么用sprintf()函数将1234567输出中间带有空格形式的12 d6 87十六进制,直接输出的话是不带空格的12d687

实现如下,望采纳

#include <stdio.h>
#include <string.h>

int main() {
    char buffer[20]; // 定义一个字符数组,用于存储输出的字符串
    sprintf(buffer, "%x %x %x", 1234567 / 256, 1234567 % 256, 1234567 % 16); // 将1234567输出为12 d6 87
    printf("%s\n", buffer); // 输出字符串
    return 0;
}

你要先把一个int装入4个char里(数组,union),然后循环输出,带空格

可以使用以下代码实现:

#include <stdio.h>

int main() {
    int num = 1234567;
    char str[20];
    sprintf(str, "%03X %02X %02X", num >> 12, (num >> 4) & 0xff, num & 0xff);
    printf("%s\n", str);
    return 0;
}

输出结果为:

12 D6 87

sprintf() 函数的第一个参数为字符数组,该函数会将格式化的字符串写入该字符数组中。第二个参数是格式化字符串,其中 %03X 表示输出的十六进制数占三个字符宽,不足三个字符时在前面补 0。后面的 %02X 同理,表示输出的十六进制数占两个字符宽,不足两个字符时在前面补 0。

在输出之前,我们先将数字 num 进行位运算,以便分离出需要输出的三个数字:

num >> 12 表示将 num 的二进制表示向右移 12 位,即将最低 12 位移出数字范围,得到的数即为最高的两位数字。
(num >> 4) & 0xff 表示将 num 的二进制表示向右移 4 位,再与 0xff(即二进制 11111111)进行与运算,得到的数即为中间的两位数字。
num & 0xff 表示将 num 与 0xff 进行与运算,得到的数即为最低的两位数字。
最后,使用 printf() 函数输出 str 数组即可

希望对你有帮助,谢谢!

img

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%x %x %x", (1234567 >> 16) & 0xFF, (1234567 >> 8) & 0xFF, 1234567 & 0xFF);
    return 0;
}