2014-11-02 130 views
0

我正在学习系统调用,我想学习的一件事是使用write()格式化。我无法搜索关于以不同格式打印的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()打印基本小数,但我不能找到以十六进制打印的任何信息。

+0

'write()'不处理格式,它只是写任何东西在缓冲区中。使用'sprintf()'将十六进制放入缓冲区,然后调用'write()'。 – Barmar 2014-11-02 08:06:18

+0

'array'的类型是什么? – chux 2014-11-03 19:54:05

回答

2

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

+0

明白了。谢谢你的澄清! – mrQWERTY 2014-11-02 08:08:52

1

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

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

你好,不知怎的,这个打印的文件告诉我这是一个二进制文件。 – mrQWERTY 2014-11-02 08:49:47

+0

您是否从文件流获取文件描述符?你是如何打开文件的? – 2014-11-02 09:04:38