我的部分代码如下:
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(µBlock[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数组(所有值为Integer且小于255)的值写出到文件中。但是它继续写文件而不是Unix下的数组中的值(在我的Linux机器上运行,但是当我使用Unix上传到实验室机器之一时,输出文件只填充了00s)有谁知道我的代码可能出错了?感谢。
PS:我知道Unix和Linux可能存在一些差异,但我的代码非常简单。这真的很重要吗?答案 0 :(得分:2)
int
的大小肯定不是1.使用正确的大小:
fwrite(µBlock[i][j], sizeof( microBlock[i][j] ), 1, output);
答案 1 :(得分:2)
鉴于你有:
int microBlock[16][16];
并且填充了0x00..0xFF范围内的值,并且您只想为文件中的每个值写一个字节,然后您需要执行以下两项操作之一:
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...
}
}
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()
,但它不是绝对的。