C语言txt转bin文件,无需创建bin文件,可直接生成(含代码)

1.按提示输入对应目标位置及准确文件名
2.如果没有同名的bin,会创建生成bin文件,当存在同名bin时,会写入该bin文件
3.数据需提前取出,设置好两位的格式 0xXX,其中XX均需要,例如0x05 数据需写入05

运行结果

 示例代码

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define MAX_PATH_LENGTH 256

int main(void)
{
	FILE* txt;
	FILE* bin;
	int out, in;
	int data[2];
	uint32_t i = 0;
	uint32_t cnt = 0;
	char filename[MAX_PATH_LENGTH];
	printf("/*****Giantec_txt_to_bin_tool*****/\n");
	printf("Enter the TXT file name: ");	//输入的filename 必须是存在的,并且要指明路径
	//scanf("%s",&filename);
	scanf("%[^\n]%*c",&filename);
	txt = fopen(filename, "r");
	if (!txt)
	{
		printf("%s cannot be open!\n",filename);
		return -1;
	}
	else
	{
		printf("%s open success !\n",filename);
		printf("数组长度:%d \n",strlen(filename));
		printf("%d %c %c\n",filename[strlen(filename)-3],filename[strlen(filename)-2],filename[strlen(filename)-1]); 
		filename[strlen(filename)-3]=0x62;//b 
		filename[strlen(filename)-2]=0x69;//i 
		filename[strlen(filename)-1]=0x6E;//n 
	} 
//	printf("Enter the BIN file name: ");	//输入的filename 必须是存在的,并且要指明路径
    //scanf("%s",&filename);
//    scanf("%[^\n]%*c",&filename);
	bin = fopen(filename, "wb");
	if (!bin)
	{
		printf("could not create the binary file: %s\n",filename);
		return -1;
	}
	else if(bin==NULL)
	{
		bin=fopen(filename, "w");
	}
	while (1)
	{
		out = fgetc(txt);
	
		if (out == EOF)
		{
			if (i == 1)
			{
				fputc(data[0], bin);
				cnt++;
			}
			break;
		}
		else if (out == ' ' || out == '\n' || out == '\r')
		{
			continue;
		}
		else if (out >= '0' && out <= '9')
		{
			out = out - '0';
		}
		else if (out >= 'a' && out <= 'f')
		{
			out = out - 'a' + 10;
		}
		else if (out >= 'A' && out <= 'F')
		{
			out = out - 'A' + 10;
		}
		else
		{
			printf("the txt file contains non-binary character!\n");
			fclose(bin);
			fclose(txt);
			return -1;
		}
	
		data[i] = out;
		i++;
		if (i == 2)
		{
			i = 0;
			in = (data[0] << 4) + data[1];
			fputc(in, bin);
			cnt++;
		}
	}
	
	fclose(bin);
	fclose(txt);
	
	printf("convert success!\n");
	printf("totally %d bytes!\n", cnt);
	return 0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值