gpt4 book ai didi

c - 在c中使用gtk3加载和写入二进制文件

转载 作者:行者123 更新时间:2023-11-30 19:38:36 30 4
gpt4 key购买 nike

我正在构建一个应用程序来使用 分析科学数据 。我无法加载二进制文件并使用读取文件中的部分内容创建新的二进制文件。

我使用了GFileoutputStreamg_file_load_contents,但是一旦零到来,它就会将其作为我不想要的终止字符。我想读取偶数零,然后按位提取数据。任何帮助将不胜感激。

我的代码:

 void file_selected(GtkWidget *filechooserbutton, gpointer data, GtkTextBuffer *buffer) {   
filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooserbutton));
g_file_get_contents(filename, &contents, NULL, NULL);

text1 = g_substr(contents,0,value);

gint DataHeaderNum=96;
gint value2=value+DataHeaderNum;
text2 = g_substr(contents,value,value2);

gchar *filler;
filler=g_strnfill (DataHeaderNum,'0');
//g_print(filler);
gint DataNum=2048-DataHeaderNum;
gint value3=value2+DataNum;
text3 = g_substr(contents,value,value3);
g_strlcat(filler,text3,2048);
text3=g_strdup(filler);
//g_print(text3);


gchar *full;
gchar *name="SpaceCraftHeader";
gchar *name2="DataHeader";
gchar *name3="Data";

full=g_strdup(filename);
g_strlcat(full,name,50);

GFile *file=g_file_new_for_path(full);
GFileOutputStream *output=g_file_replace(
file,NULL,FALSE,
G_FILE_CREATE_NONE,
NULL,NULL);

g_output_stream_write(G_OUTPUT_STREAM(output),
text1,strlen(text1),NULL,NULL);

g_output_stream_close(G_OUTPUT_STREAM(output),NULL,NULL);


}

最佳答案

g_file_get_contents 读取整个文件,就像您想要的那样。但是,如果您丢弃长度并将其视为 C 中的字符串,那么显然您将在读取第一个空字节之后遇到问题。

您应该做的第一件事是保存长度。将您对 g_file_get_contents 的调用更改为:

gsize length;
g_file_get_contents(filename, &contents, &length, NULL);

在实际代码中,您还应该检查返回值和/或 GError 参数...

现在,contents 中有一个字节数组,length 中有字节数。请注意,length 是整个文件的大小,而不是直到第一个空字节的字节数。您可以对这些数据执行任何您想要的操作,只需记住,在 C 中,字符串以 null 结尾。这意味着,如果您选择将缓冲区视为字符串,则第一个空字节是该字符串的末尾。如果想继续读,就从下一个字节重新开始;只要你不超过文件末尾就应该没问题。

关于c - 在c中使用gtk3加载和写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830489/

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