2015-02-05 52 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); 
}