我正在尝试在屏幕上打印我正在读取的文件的连续字节。在 .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_t
比u8
。 malloc()
不需要。
我将把它留给OP来制作一个8字节的单行解决方案。提示:也可以使用LLU
或uint64_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/