2014-11-02 115 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