c代码写数据到二进制的bin文件中

需要将数据写入到bin文件中,打开该文件是一堆乱码,增加数据的保密性

 

例如:要写入的数据为一个字符串,加上若干个int型整数

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    char names[100] = "KobeBryant";
    int iValue[14] = { 84, 15, 157, 103, 112, 48, 142, 52, 128, 64, 108, 76, 136, 80 };
    
    /* 新建一个bin文件 */
    FILE *fw = fopen("1.bin", "wb");
    if (fw == NULL)
        return 0;

    /* 写入imgname,并加上一个空格 */
    for (int i = 0; i < strlen(names); i++)
        fwrite(names + i, sizeof(char), 1, fw);
    char space = 32;
    fwrite(&space, sizeof(char), 1, fw);

    /* 将数值写入到bin文件中 */
    int length = sizeof(iValue) / sizeof(int);
    for (int i = 0; i < length; i++)
    {
        fwrite(iValue+i, sizeof(int), 1, fw);
    }

    fclose(fw);
    return 1;
}

写入的结果:

 

读入bin文件的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    /* 创建文件指针,以只读+二进制的方式打开文件 */
    FILE *fr = fopen("1.bin", "rb");

    /* 判断打开文件是否成功 */
    if (fr == NULL)
    {
        printf("Message : %s\n", strerror(errno));
        return -1;
    }
    /* 输出img的图片名称,加上一个换行符 */
    char c_name;
    int rc = -1;
    rc = fread(&c_name, 1, sizeof(char), fr);
    while (c_name!=32)
    {
        cout << c_name;
        rc = fread(&c_name, 1, sizeof(char), fr);
    }
    printf("%c", 10);

    /* 读入每个int型数据后,并输出 */
    int data = -1;
    int n = 0;
    rc = fread(&data, sizeof(int), 1, fr);
    while (rc)
    {
        n += rc;
        printf("%-5d", data);
        rc = fread(&data, sizeof(int), 1, fr);
    }

    /* 关闭文件 */
    fclose(fr);
    system("pause");
    return 0;
}
读该bin文件的结果:
rc = fread(&c_name, 1, sizeof(char), fr)函数,每次读入一个字符,返回值为读入成功的字符个数,读入成功,rc=1,读入失败,rc=-1;
直到读入空格时,字符串的读入停止。
每次读入一个字符时,文件指针fr都会向后挪动一位。

 

转载于:https://www.cnblogs.com/k7k8k91/p/9933590.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言本身并没有内置的函数或库可以直接实现xml转二进制bin文件的功能,需要借助第三方库或手动编写代码实现。 一种常见的方法是使用libxml2库,该库提供了丰富的API可以解析和生成XML文档。具体实现方式如下: 1. 使用libxml2库解析XML文档,获取XML节点和属性信息,并将其转换为二进制数据结构。 2. 将二进制数据结构入到二进制文件,生成二进制bin文件。 以下是一个简单的示例代码,仅供参考: ``` #include <stdio.h> #include <stdlib.h> #include <libxml/parser.h> #include <libxml/tree.h> typedef struct { int id; char name[50]; float price; } Product; int main() { xmlDocPtr doc; xmlNodePtr root, node; Product product; FILE* fp; // 解析XML文档 doc = xmlReadFile("products.xml", NULL, XML_PARSE_NOBLANKS); if (doc == NULL) { printf("Error: Failed to parse XML document.\n"); return EXIT_FAILURE; } // 获取根节点 root = xmlDocGetRootElement(doc); if (root == NULL) { printf("Error: Empty document.\n"); xmlFreeDoc(doc); return EXIT_FAILURE; } // 遍历XML节点,将数据转换为二进制格式 node = root->children; while (node != NULL) { if (xmlStrcmp(node->name, (const xmlChar*)"product") == 0) { // 解析节点属性 xmlChar* id = xmlGetProp(node, (const xmlChar*)"id"); xmlChar* name = xmlGetProp(node, (const xmlChar*)"name"); xmlChar* price = xmlGetProp(node, (const xmlChar*)"price"); // 将数据转换为二进制格式 product.id = atoi((const char*)id); strcpy(product.name, (const char*)name); product.price = atof((const char*)price); // 二进制文件 fp = fopen("products.bin", "ab"); fwrite(&product, sizeof(Product), 1, fp); fclose(fp); // 释放属性值 xmlFree(id); xmlFree(name); xmlFree(price); } node = node->next; } // 释放资源 xmlFreeDoc(doc); xmlCleanupParser(); return EXIT_SUCCESS; } ``` 上述代码,假设XML文档包含一个名为“product”的节点,该节点有三个属性:id、name和price,分别表示产品的编号、名称和价格。代码将遍历XML文档,解析每个“product”节点的属性,并将其转换为Product结构体的二进制格式,最后将数据入到二进制文件“products.bin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值