gpt4 book ai didi

c - fwrite() 在 Unix 中一直写入 00。哪里可能错了?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:02 24 4
gpt4 key购买 nike

我的部分代码如下所示:

for(i=0; i<16;i++){
for(j=0;j<16;j++){
printf(" %d ", microBlock[i][j]); // everything looks ok from the console
}
printf("\n");
}
for(i=0; i<16;i++)
for(j=0;j<16;j++){
fwrite(&microBlock[i][j], 1, 1, output); //each value is smaller than 255
//only want to write 1 byte for each value.
// For example, ff for value 255
}

我想将 16 x 16 数组的值(所有值都是整数且小于 255)写到一个文件中。但是它一直在 Unix 下将 00 写入文件而不是数组中的值(在我的 Linux 机器上工作但是当我使用 Unix 上传到一台实验室机器时,输出文件只填充了 00)有谁知道我的代码哪里可能有问题?谢谢。

PS:我知道 Unix 和 Linux 可能有些不同,但我的代码非常简单。这真的重要吗?

最佳答案

假设你有:

int microBlock[16][16];

它填充了 0x00..0xFF 范围内的值,而您只想将这些值中的每一个写入一个字节到文件中,那么您需要执行以下两项操作之一:

选项 1 — 一次写入一个字节

for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
char byte = microBlock[i][j];
if (fwrite(&byte), 1, 1, output) != 1)
...write failed...
}
}

选项 2 — 一次写入所有字节

char nanoBlock[16][16];
for (int i = 0; i < 16; i++)
for (int j = 0; j < 16; j++)
nanoBlock[i][j] = microBlock[i][j];

if (fwrite(nanoBlock, sizeof(nanoBlock), 1, output) != 1)
...write failed...

两者都行;第二种可能更有效,因为它只调用一次 fwrite(),但这不是绝对给定的。

关于c - fwrite() 在 Unix 中一直写入 00。哪里可能错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114607/

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