gpt4 book ai didi

c - fwrite 将字节输出为短字节

转载 作者:行者123 更新时间:2023-11-30 14:54:26 25 4
gpt4 key购买 nike

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

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);

有人可以在我发疯之前向我解释一下发生了什么吗?

编辑:我是个白痴。谢谢你试图帮助我。数据的生成方式我认为容器与上面相同,但实际上每个字符都获得了十六进制的一部分。 IE。数据[0]为0x6,数据[1]为0xf。因此,当fwrite写入文件时,只是在间隙中进行归档,0xf实际上是0x0f等。抱歉浪费了大家的时间。

最佳答案

从你的问题来看,目前还不清楚具体的问题出在哪里。分配和指派产生所需的输出。缺少的是验证您的尝试实际上是否成功。

例如,以下代码(使用您的分配、赋值和 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

仔细检查一下,如果我误解了您的问题,请告诉我。

关于c - fwrite 将字节输出为短字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com