c - 如何使用 printf 函数添加连续字节的数字以显示整数?

标签 c printf

我正在尝试在屏幕上打印我正在读取的文件的连续字节。在 .vdi 文件中读取的文件,我试图以 printf 格式显示虚拟驱动器的大小。

如何显示从文件中读取的字节值的整数值?

我对 C 如何使用 printf 函数仍然有点模糊。我的代码:

void get_file_size(u32 fd) {
    u8* HDDsize = (u8 *)malloc(8);

    if(HDDsize == NULL) {
        printf("Memory not allocated!");
    }

    lseek(fd,DRIVE_SIZE,SEEK_SET);
    read(fd,HDDsize,8);
    printf("The file system size is: %lli\n",
            HDDsize[7]+HDDsize[6]+HDDsize[5]+HDDsize[4]+
            HDDsize[3]+HDDsize[2]+HDDsize[1]+HDDsize[0]);
    free(HDDsize);
}

最佳答案

要打印以小端存储(最低地址中的最低有效字节)存储的 4 字节值,代码需要缩放每个字节,而不是简单地将它们相加。每个字节的重要性比相邻字节高 256 倍。使用:

#include <stdint.h>
#include <stdio.h>

void Print_Size4(int fd) {
  uint8_t HDDsize[4];

  if (lseek(fd, DRIVE_SIZE,SEEK_SET) == -1) return;
  if (read(fd, HDDsize, sizeof HDDsize) != sizeof HDDsize) return;

  printf("The file system size is: %lu\n",
      //                 LU --> insure all math is at least of unsigned long
      (((HDDsize[3] * 256LU + HDDsize[2]) * 256 + HDDsize[1]) * 256 + HDDsize[0]));
}
<小时/>

最好使用标准固定类型,例如 uint8_tu8malloc()不需要。

我将把它留给OP来制作一个8字节的单行解决方案。提示:也可以使用LLUuint64_t数学。

也许使用循环。

uint64_t size = 0;
for (unsigned i=sizeof HDDsize; i>0; i--) {
  size = size*256 + HDDsize[i-1];
}

研究<inttypes.h>找到最好的printf() uint64_t 的格式说明符.

关于c - 如何使用 printf 函数添加连续字节的数字以显示整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42774273/

相关文章:

c - 程序将计算大多数提供的值,除了一些

c - Glib 信号 - 如何检查实例的处理程序是否已被阻止?

c - 打印语句更改字符数组输出

c - 使用 fscanf 时在 C 中打印 2D 字符数组时出现问题

c - 打印 wchar_t 会产生奇怪的输出

c - nedtries 的作者用 "in-place"表示什么?

c - 查找以特定字符开头并在 C 中显示的所有可能单词(使用二叉树的字典实现)

c++ - typedef struct 与 struct - ‘struct' 的存储大小未知

c - sscanf 扫描特定大小的字符串

java - 对于由字符串和 double 组成的单个打印输出,我如何以及以什么顺序组合 printf 格式化参数?