gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:35:21 24 4
gpt4 key购买 nike

我正在尝试在屏幕上打印我正在读取的文件的连续字节。在 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com