You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中仅使用write()函数如何输出字符的十六进制表示

问题解答
  • 结论是不可以,你无法直接在write()函数中使用%X格式符实现格式化输出。
  • 核心原因是write()和printf()的功能定位完全不同:
    • printf()是C标准库封装的格式化输出函数,内部内置了格式符解析逻辑,会自动识别%X这类占位符,将对应参数转换为十六进制文本后再输出。
    • 而write()是底层的POSIX系统调用,仅接受三个固定参数:文件描述符、待输出数据的内存缓冲区地址、待输出的字节数,不会做任何格式解析工作。如果直接把带%X的字符串传入write(),它只会把%和X作为普通字符原封不动输出,不会做任何替换。

如果你要仅通过write()输出字符ASCII码的十六进制值,可以手动实现字符转十六进制的逻辑,再调用write()输出,参考实现代码如下:

#include <unistd.h>

// 单字节转十六进制输出函数,仅依赖write
void print_byte_hex(unsigned char ascii_val) {
    const char hex_table[] = "0123456789ABCDEF";
    // 输出高4位对应的十六进制字符
    char high_bit = hex_table[(ascii_val >> 4) & 0x0F];
    write(STDOUT_FILENO, &high_bit, 1);
    // 输出低4位对应的十六进制字符
    char low_bit = hex_table[ascii_val & 0x0F];
    write(STDOUT_FILENO, &low_bit, 1);
}

int main(void) {
    char test_ch = 'B'; // 对应ASCII码为0x42
    write(STDOUT_FILENO, "Hex number of 'B' : ", 20);
    print_byte_hex(test_ch);
    write(STDOUT_FILENO, "\n", 1);
    return 0;
}

上述代码运行后会输出Hex number of 'B' : 42,全程仅调用write()完成输出。

内容的提问来源于stack exchange,提问作者BeginToLearn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:33:03