我正在尝试将以下数组写入文件:
char * data = malloc(4);
data[0] = 0x6f;
data[1] = 0x45;
data[2] = 0x23;
data[3] = 0x01;
打开代码:
FILE *fp = fopen("output.txt", "wb");
if (fp != NULL){
...
我试图以这些方式输出数据:
fwrite(data, 4, sizeof(char), fp);
fwrite(data, sizeof(char), 4, fp);
for(i = 0; i < 4; i++){
fwrite(data + i, 1, 1, fp);
}
...
但是我使用fwrite输出文件的每一种方式都是这样的:
hexdump output.txt
0000000 060f 0405 0203 0001
编辑以供参考,我希望输出看起来像这样:
0000000 6f45 2301
结束修改
结束代码:
fclose(fp);
有人可以在我疯了之前向我解释一下发生了什么事吗?
编辑:我是个白痴。谢谢你试图帮助我。数据生成的方式是我认为容器如上所述,但实际上每个char都获得了一部分十六进制。即data [0]为0x6,data [1]为0xf。因此,当fwrite写入文件时,它只是填补空白,0xf实际上是0x0f等。抱歉浪费每个人的时间。
答案 0 :(得分:1)
目前还不清楚问题的确切问题在哪里。分配和分配产生所需的输出。缺少的是验证您尝试过的实际成功。
例如,以下代码(使用您的分配,赋值和fwrite)产生了您想要的输出:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv) {
size_t n;
char *data = malloc (4);
FILE *fp = argc > 1 ? fopen (argv[1], "wb") : stdout;
if (!fp) { /* validate file open for reading */
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
if (!data) { /* validate allocation succeeded */
fprintf (stderr, "error: virtual memory exhausted.\n");
return 1;
}
data[0] = 0x6f;
data[1] = 0x45;
data[2] = 0x23;
data[3] = 0x01;
/* write / validate write size */
if ((n = fwrite (data, sizeof *data, 4, fp)) != 4) {
fprintf (stderr, "error: fwrite failure.\n");
return 1;
}
if (fclose (fp) == EOF) { /* validate close after write */
fprintf (stderr, "error: on file stream close.\n");
return 1;
}
free (data);
return 0;
}
示例输出文件
$ ./bin/frwitebytes dat/databytes.dat
$ hexdump -Cv dat/databytes.dat
00000000 6f 45 23 01 |oE#.|
00000004
或正是您正在寻找的hexdump
格式:
$ hexdump dat/databytes.dat
0000000 456f 0123
0000004
仔细看看,如果我误解了你的问题,请告诉我。
答案 1 :(得分:0)
我怀疑你的系统编码?这是我的测试,它产生预期的输出
<?php echo $url; ?>
输出
#include "stdio.h"
int main() {
char buffer[] = {0x6f, 0x45, 0x23, 0x01};
FILE * pFile = fopen ("out.bin", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
return (0);
}