我想编程一个 16/32 位的 EEPROM。我正在从 C 程序编写文件,但fwrite()
似乎只做 8 位?我写了一个简单的例子,并使用 xxd(和 hexdump)查看结果,但文件似乎只有 8 位。我想知道由于 hexdump 和 xxd 的限制,我是否只看到 8 位,或者问题出在fwrite()
哪里?
任何人都知道我如何检查所有位是否都写入文件?
#include <stdio.h>
#include <stdlib.h>
const unsigned int dataSize = 255;
unsigned long tmp[] = { 0xFFFF, 0xFFDD, 0xFDDD, 0xF000, 0x0F0F, 0x0001, 0x1010 };
int main() {
const char *path = "text.bin";
FILE *fp = fopen(path, "wb");
const void *data = tmp;
if (!fp) {
fprintf(stderr, "fopen() failed for '%s'\n", path);
} else {
fwrite(data, 1, dataSize, fp);
}
return 0;
}
使用xxd我看到:
00000000: ffff 0000 0000 0000 ddff 0000 0000 0000 ...... 00000010: ddfd 0000 0000 0000 00f0 0000 0000 0000 ...... 00000020: 0f0f 0000 0000 0000 0100 0000 0000 0000 ...... 00000030: 1010 0000 0000 0000 0000 0000 0000 0000 ...... 00000040:c005 5182 b27f 0000 0000 0000 0000 0000 ..Q...... 00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 00000090: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ...... 000000f0: 0000 0000 0000 0000 0000 0000 0000 00 ......
编辑:我试图确保有 32 位写入文件。xxd的结果是:
00000000: 11111111 11111111 00000000 00000000 00000000 00000000 ......
哪个显示有 16 位,0xFFFF
但其他 16 位在哪里?0xFFFF
理想情况下,对于 32 位边界,我希望看到 16 个零,然后是 16 个零。
我想知道这是否是xxd软件没有显示它的问题,而不是 C 没有写它。
(我意识到名称和文件指针没有关闭,这只是我在 2 分钟内敲出的东西以帮助显示问题,我从空中选择了 255。)