2015-02-05 38 views
0

嘿所以我相當新的C本身和非常新的在C中使用系統調用,但我必須使用它的任務,所以我試圖實踐閱讀和寫作和從一個文件。閱讀工作正常,但由於某種原因寫作是奇怪的事情。它向文件寫入某種我想要寫入文件的數字的填充十六進制表示形式。任何幫助將不勝感激!!在C中使用系統調用填充十六進制

buffer= 10; 
if (write(file, &buffer,sizeof(int)) < sizeof(int)) { 
    printf("Error in writing\n"); 
    exit(EXIT_FAILURE); 
} 

當我運行此它把在該文件,但是當我打印輸出本身的數量它打印正確的號碼

0a00 0000

+2

你如何檢查文件?你如何檢查寫入的內容?你如何打開文件?這與C#或C++有什麼關係? – 2015-02-05 20:58:16

+1

你想寫什麼文件?如果您想要將數字10寫入文件,則必須先將其轉換爲字符串。 – Oswald 2015-02-05 20:59:51

回答

0

sizeof(int)是32位,所以4個字節。這意味着4組兩個十六進制值。那有意義嗎?所以它應該填充它,因爲你正在寫4個字節的價值。

2

sizeof(int)是4個字節(顯然是在您的環境中),它是32位,可以用8個十六進制數字表示,這就是您在文件中看到的內容。

你顯然是在Little Endian機器上,所以最低有效字節首先被寫入。在一臺大型機器上,你會在文件中看到0000 000a。

+0

@SamuelEdwinWard好點。我已經添加到我的答案。 – itsme86 2015-02-05 21:03:32

+0

但我想要寫入文件的是十進制表示而不是十六進制。我必須手動將其轉換爲十進制或其他? – 2015-02-05 21:18:12

+0

@JoshRoberts如果您希望能夠在記事本中打開文件或者選擇任何文本編輯器,並在其中看到「10」,則必須編寫ASCII(或unicode,取決於文本編輯器)值那裏的數字。使用你的代碼(但是使用8位'char'類型而不是'int',嘗試寫入值49(ASCII代碼爲'1')和48(ASCII代碼爲'0')。在文本編輯器中打開文件,你會看到「10」,當然,在十六進制編輯器或者你曾經看到的0a00 0000中,你會看到3130.(2個8位整數的十六進制數49和48 ) – itsme86 2015-02-05 21:24:16

0

使用的snprintf

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

main() 
{ 
    int file = creat("afile.txt",S_IRWXU); 
    int buffer= 10; 
    char sbuffer[10]; 
    snprintf(sbuffer,sizeof(sbuffer),"%d",buffer); 
    if (write(file, &sbuffer,strlen(sbuffer)) < strlen(sbuffer)) { 
     printf("Error in writing\n"); 
     exit(EXIT_FAILURE); 
    } 
    close(file); 
}