16进制文本文件转二进制文件(C语言)

来源:互联网 发布:软件系统集成方案模板 编辑:程序博客网 时间:2024/06/18 13:39

写的一个小程序,将‘’6828046D441711160628597F7F7A633F00001A0A6B0000227C1309790D‘’这样的16进制字符串 转换为二进制存起来,注意因为写的仓促,所以并没有将空格滤过。


#include <stdio.h>

#include <string.h>
#include <unistd.h>


static char trans(char * buffer);


int main(int argc, char** argv)
{
FILE * fp = 0;
FILE * fp_o = 0;
char buffer[256] = {0};
int size = 0;
int i = 0;
if(argc != 3)
{
printf("Please input filename.\n");
return 0;
}
fp = fopen(argv[1], "r");
if(fp == 0)
{
printf("Please input correct filename ,%s.\n",argv[1]);
return 0;
}
fp_o = fopen(argv[2], "wb");
if(fp_o == 0)
{
printf("Please input correct filename ,%s.\n",argv[2]);
return 0;
}
while(1)
{
memset(buffer, 0, sizeof(buffer));

size = fread(buffer, 1, sizeof(buffer), fp);
if(size <= 0)
{
fclose(fp);
fclose(fp_o);
return 0;
}
for(i = 0; i < size; i += 2 )
{
char temp = trans(&buffer[i]);
fwrite(&temp,sizeof(char),1,fp_o);
printf("temp :%02hhx buffer, i :%d , buffer[i]: %c, buffer [i+1]: %c,size : %d\n",temp,i,buffer[i],buffer[i+1],size);
}
}
return 0;
}


//将两个字符合成一个字符数据
static char trans(char * buffer)
{
char temp = 0;
for(int i = 0; i < 2; i++)
{
temp = temp << 4;
if(buffer[i] >= '0' && buffer[i] <= '9')
{
temp += buffer[i] - 0x30;
}
else if(buffer[i] >= 'a' && buffer[i] <= 'f')
{
temp += buffer[i] - 0x61 + 0x0a;
}
else if(buffer[i] >= 'A' && buffer[i] <= 'F')
{
temp += buffer[i] - 0x41 + 0x0a;
}
else
{
//cout << "get wrong value: "<< (int)buffer[i] << endl;
printf("get wrong value: %02X ,file: %s ,line: %d\n",buffer[i],__FILE__,__LINE__);
}
}
return temp;
}


阅读全文
0 0
原创粉丝点击