📄 bintob.c
字号:
/*
File: bintob.c
*/
#include <stdio.h>
#include "stddefs.h"
void U32ToASCII(U32 value, char *ASCII)
{
U8 i;
U8 tmp;
for(i=0; i<8; i++)
{
tmp=((U8)(value>>(4*i)))&0x0F;
if(tmp<10)
tmp+=48;
else
tmp+=55;
*(ASCII+7-i)=tmp;
}
}
void U8ToASCII(U8 Byte, char *ASCII)
{
U8 tmp;
tmp = (Byte>>4)&0x0F;
if(tmp<10)
tmp+=48;
else
tmp+=55;
*ASCII = tmp;
tmp = (Byte)&0x0F;
if(tmp<10)
tmp+=48;
else
tmp+=55;
*(ASCII+1)=tmp;
}
int BinaryToB(FILE *InFile, FILE *OutFile, U32 StartAddress)
{
int i, j=0;
char String[500];
U8 tmp;
int ByteCount=0;
while(!feof(InFile))
{
U32ToASCII(StartAddress+((j++)*16), String);
for(i=0; i<16; i++)
{
tmp=(U8)fgetc(InFile);
if(!feof(InFile))
U8ToASCII(tmp, String+i*2+10);
else
break;
ByteCount++;
}
U8ToASCII((U8)i, String+8);
*(String+i*2+10)='\0';
if(i>0)
fprintf(OutFile, "%s\r\n", String);
}
return ByteCount;
}
U32 ASCIIHEXToU32(char *String)
{
U8 i=0;
U32 Data=0;
while(*(String+i)!='\0')
{
Data = Data<<4;
if( (*(String+i))>47 && (*(String+i))<58 )
Data += ((*(String+i))-48);
if( (*(String+i))>64 && (*(String+i))<91 )
Data += ((*(String+i))-65+10);
if( (*(String+i))>96 && (*(String+i))<123 )
Data += ((*(String+i))-97+10);
i++;
}
return Data;
}
int main(int argc, char *argv[])
{
FILE *InFile, *OutFile;
if(argc==4)
{
InFile=fopen(argv[1], "rb");
OutFile=fopen(argv[2], "wb");
printf("Starting Address=0x%x\n",ASCIIHEXToU32(argv[3]));
printf("Number of Byte=%d\n", BinaryToB(InFile, OutFile, ASCIIHEXToU32(argv[3])) );
fclose(InFile);
fclose(OutFile);
}
else {
printf("BinToB Version 1.0 by Teddy Wong\n");
printf("Usage: %s [InFileName] [OutFileName] [HexStartingAddress]\n", argv[0]);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -