2015-02-05 3 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++? –

+1

Что вы хотите записать в файл? Если вы хотите записать номер 10 в файл, сначала нужно преобразовать его в строку. – Oswald

ответ

0

sizeof(int) составляет 32 бит, так что 4 байта , Это означает 4 набора из двух шестнадцатеричных значений. Имеет ли это смысл? Таким образом, это должно быть дополнением, поскольку вы пишете 4 байта.

2

sizeof(int) - это 4 байта (очевидно, в вашей среде), который является 32-битным и может быть представлен 8 шестнадцатеричными цифрами, что и есть то, что вы видите в файле.

Вы, очевидно, находитесь на машине Little Endian, поэтому сначала записывается младший байт. На машине большого конца вы увидите вместо этого 0000 000a.

+0

@SamuelEdwinWard Хорошая точка. Я добавил это к моему ответу. – itsme86

+0

, но то, что я хочу записать в файл, является десятичным представлением, а не шестнадцатеричным. Должен ли я вручную преобразовать его в десятичный или что-то еще? –

+0

@JoshRoberts Если вы хотите, чтобы открыть файл в блокноте или какой-либо другой текстовый редактор по своему выбору и увидеть там «10», вам нужно будет написать значения ASCII (или unicode, опять же в зависимости от текстового редактора) цифр. Используя код, который у вас есть (но с 8-битным типом 'char' вместо' int', попробуйте записать значения 49 (ASCII-код для '1'), за которым следует 48 (код ASCII для '0'). Тогда, когда вы откройте файл в текстовом редакторе, вы увидите «10». Конечно, в шестнадцатеричном редакторе или в том, что вы использовали для просмотра 0a00 0000, вы увидите 3130. (шестнадцатеричный из 8-битных целых чисел 49 и 48) – itsme86

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); 
} 
Смежные вопросы