以前就碰到了二进制文件转为16进制表示的数组代码的情况,当时采用了一个16进制编辑器得到了结果,前两天做测试bootloader的是又碰到了这种情况,到网上找了个16进制编辑器,找了好久都没有找了对应的菜单项(汗!),于是就自己写了个代码(写完之后居然又在16进制编辑器找了了对应的菜单项,更汗!),写都写了,就先保存吧,可能以后也还要用。
#include "stdio.h"
#include 
"stdlib.h"
#include 
"memory.h"

int main()
{

    FILE 
*v_fpLog, *fp;
    
int fSet = 0, fEnd = 0, i, j;
    
int filelen = 0, num, last, r;
    
char *pb, ch[6], cnum[11];
    
if ( (v_fpLog = fopen( "sjf.bin" , "rb+")) == NULL || (fp = fopen( "out.txt" , "w+a+")) == NULL) 
    
{
        printf( 
"The file was not opened");
        
return 0;
    }

    
else
    
{
        fseek( v_fpLog, 
0, SEEK_SET );
        fSet 
= ftell( v_fpLog );
        fseek( v_fpLog, 
0, SEEK_END );
        fEnd 
= ftell( v_fpLog );

        pb 
= (char *)malloc(fEnd - fSet );
        fseek( v_fpLog, 
0, SEEK_SET );
        fread(pb, fEnd 
- fSet, 1, v_fpLog);

        fwrite(
"unsigned char boot_bin["231, fp);
        memset(cnum, 
011);
        itoa(fEnd
-fSet, cnum, 10);
        fwrite(cnum, 
sizeof(cnum), 1, fp);
        fwrite(
"] = { "61, fp);        
        num 
= (fEnd-fSet)/16;
        last 
= (fEnd-fSet)%16;
        
for(i = 0; i < num; i++)
        
{
            
for(j = 0; j < 16; j++)
            
{
                memset(ch, 
06);
                r 
= (int)pb[j + 16 * i];
                r 
=  r & (0xFF);
                sprintf(ch, 
"0x%02x,", r);
                r 
= fwrite(ch, sizeof(ch), 1, fp);
                printf(
"%s ", ch);
            }

            fwrite(
" "11, fp);
            printf(
" ");
        }

        
for(i = 0; i < last; i++)
        
{
            r 
= (int)pb[i + 16 * num];
            r 
=  r & (0xFF);
            sprintf(ch, 
"0x%02x,", r);
            fwrite(ch, 
sizeof(ch), 1, fp);
            printf(
"%s ", ch);
        }

        fwrite(
"}"11, fp);
        free(pb);
        fclose(v_fpLog);
        fclose(fp);
    }

    
return 0;
}