使用write()打印十六进制

时间:2014-11-02 08:02:50

标签: c system-calls

我正在学习系统调用,我想要学习的一件事是使用write()进行格式化。我无法搜索有关以不同格式打印的write()系统调用的大量信息。

我有一个以十进制或十六进制格式打印数组的函数。但是,我想将其转换为使用write()。

if (hexFlag == 0) {
            for (i = 0; i < size; i++) { 
                    fprintf(fp, "%d ", array[i]);
            }
    } else {
            for (i = 0; i < size; i++) { 
                    fprintf(fp, "%x ", array[i]);
            }
    }

我知道如何使用write()打印基本小数,但我找不到有关以十六进制打印的任何信息。

2 个答案:

答案 0 :(得分:2)

write()只是“打印”原始内存内容 - 没有办法在那里设置任何格式。您唯一的选择是预先格式化缓冲区(例如使用sprintf()或类似的东西),然后使用write()

答案 1 :(得分:1)

写入系统调用会将缓冲区中的所有内容都抛出到文件描述符提供的文件中。您将必须使用十六进制值构造缓冲区字符串,然后将其传递给写入系统调用。您可以这样做:

 char buf[3] = {0};
 for (i = 0; i < size; i++) { 
    snprintf(buf, 2, "%02x ", array[i]);
    write(fd, buf, 2);
 }