我想精确地生成125000000字节或10 ^ 9位随机数,但最终却得到125000007字节的数据。如何从文件中切除最后7个字节?
我尝试过
int truncate(const char *path, off_t length);
truncate("/tmp/F.bin", 7);
这是工作代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
union
{
unsigned int uc;
unsigned char byte[4];
} rand_data;
int main(){
FILE * fp;
fp = fopen("/tmp/F.bin", "wb");
unsigned int size = 0;
srand(501459);
while(size <= 125000000) {
rand_data.uc = rand();
fprintf(fp, "%x%x%x%x", rand_data.byte[3], rand_data.byte[2], rand_data.byte[1], rand_data.byte[0]);
size = ftell(fp);
}
printf("%d", size);
fclose(fp);
return 0;
}
答案 0 :(得分:0)
%x
似乎是此作业的错误格式说明符,因为它可能写入多个字节。
尝试改用%c
。
我也不知道您为什么使用ftell
。我会去的:
size += 4;
相反。
也许是这样的循环:
while(size < 4*31250000) {
rand_data.uc = rand();
fputc(rand_data.byte[3], fp);
fputc(rand_data.byte[2], fp);
fputc(rand_data.byte[1], fp);
fputc(rand_data.byte[0], fp);
size += 4;
}
答案 1 :(得分:0)
解决方案是将我的条件更改为大小<125000000,并根据建议将%x更改为%02x。 :)