【问题标题】:Print Hex number as decimal将十六进制数打印为十进制
【发布时间】:2011-10-06 13:01:55
【问题描述】:

我正在尝试在 Linux 中制作 fdisk 程序。我有一个缓冲区,其中包含分区磁盘信息(起始扇区-结束扇区-分区大小...等)。

我有缓冲区数组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

这个是 hexa 800h 我需要它是十进制 2048

【问题讨论】:

  • 这和vi有什么关系?
  • 我使用 vi{文本编辑器} 编写了这段代码。
  • Partation?(另外,我想你忘了添加“鼠标”、“办公桌”、“工时”和“食物”标签)
  • 不太明白,你用'%x'输出,为什么不用%d
  • 当我使用 %d 而不是 %x 时,我没有得到所需的十进制结果,但在使用 %x 的情况下,我得到了与所需数字相对应的六进制。 - 我的主要问题是将许多数组元素合并到一个数字中以打印它。需要合并 x[1]=1 和 x[2]=2 以将它们打印在一个元素中以打印十二个。

标签: c linux terminal


【解决方案1】:
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);

【讨论】:

  • 非常感谢。这个简单的解决方案有效,但我想要一个更简单的解决方案,但没关系。
猜你喜欢
  • 1970-01-01
  • 2015-02-14
  • 2014-09-18
  • 2012-11-12
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多