matrix[i]
是32位整数上的指针。即使指定的值以8位为单位,也不会在写入二进制流时“压缩”数据(另外,可能不会写入512个值,但只有512/4=128个值)。
您的机器是小endian,所以您首先得到LSB,然后为每个值得到3个零。
所以改变
矩阵〔i〕
从
int32_t *
到
char *
或
unsigned char *
根据需要,确保您的值在8位范围内,并且您可以使用
fwrite
就像你计划的那样。
如果无法更改
matrix
,使用循环转换值
for(i = 0; i < SIZE; i++)
{
uint8_t to_write = matrix[i]; // assign/truncate for 0/255 range
fwrite(&to_write, 1, 1, f);
}
如果您的数据已签名,则必须使用
int8_t
. 但是那样的话,你就不能写了
a0
为160。
编辑:您的编辑显示
矩阵
.
矩阵〔i〕
是数据上的指针,因此需要使用双循环来转储它,否则将复制数组的地址,而不是值
for(i = 0; i < SIZE; i++)
{
const int *row = matrix[i];
for(j = 0; j < SIZE; j++)
{
uint8_t to_write = row[j]; // assign/truncate for 0/255 range
fwrite(&to_write, 1, 1, f);
}
}