fwrite输出字节为短

时间:2017-10-14 00:50:40

标签: c fwrite

我正在尝试将以下数组写入文件:

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等。抱歉浪费每个人的时间。

2 个答案:

答案 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);
}