簡體   English   中英

在C編寫的填充十六進制中使用系統調用

[英]Using system calls in C writing padded hex

嘿,所以我對C本身並不陌生,並且對使用C中的系統調用非常陌生,但是我必須使用它進行分配,所以我試圖練習讀寫文件。 讀取工作正常,但由於某種原因,寫入工作很奇怪。 它寫到文件的某種形式的填充十六進制表示我要寫入文件的數字。 任何幫助將不勝感激!!

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

當我運行它時,它將其放入文件中,但是當我打印出數字本身時,它將打印正確的數字

0a00 0000

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

您顯然在Little Endian機器上,因此最低有效字節首先被寫入。 在大型字節序計算機上,您會在文件中看到0000 000a。

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

使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM