Вывести шестнадцатеричное число как десятичное - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь сделать программу fdisk в Linux. У меня есть буфер, который содержит информацию о диске раздела (начальный сектор, конечный сектор, размер раздела ... и т. Д.).

Проблема в том, что у меня есть буферный массив char buf[512], и этот буфер содержит необходимую информацию, и я хочу напечатать ее в десятичном виде. Результат должен быть dec 2048, но моя программа напечатает hex 0800

Программа может видеть каждую цифру восемь ноль ноль, и я хочу, чтобы она видела восемь сотен.


Код

#define _LARGEFILE64_SOURCE
#define buff_SIZE 512

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


int main(int argc, char ** argv){


  int fd; // File descriptor
  unsigned char buf[buff_SIZE];

  if(argc<2) {
     perror("Error: No such file or directory");
     exit(2); // File scripted: 0 input 1 output 2 error
  }

  // Open Driver::
  if((fd=open(argv[1], O_RDONLY | O_LARGEFILE ))==-1){
     perror("Error: Can not open the file");
     exit(2);
  }

  // Reading file descriptor into buffer::
  if(read(fd, buf, buff_SIZE)!=buff_SIZE)
    perror("Error: Reading error");

  if ((buf[446]==0x80)||(buf[446]==0x00))
     printf("%x\n",buf[446]);
  int i;
  for(i=447;i<=449;i++)
    printf("%x\n",buf[i]);
  printf("Partation ID:%x\n",buf[450]);
  printf("Starting Sector:%x%x%x%x\n",buf[454],buf[455],buf[456],buf[457]); //***THE PROBLEM***

 close(fd);
 return 0;}

Выход

80
20
21
0
Partation ID:83
Starting Sector:0800

Это в гекса 800h мне нужно в десятичном 2048

1 Ответ

1 голос
/ 06 октября 2011
printf("Starting Sector:%lu\n",
         (unsigned long)buf[454] * 0x1000
       + (unsigned long)buf[455] * 0x100
       + (unsigned long)buf[456] * 0x10
       + (unsigned long)buf[457] * 0x1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...