在HDCP预制key的时候,很多人都遇到这种情况,客户提供的是好几K甚至好几M的bin文件,里面304个字节对应一组hdcp key。如果我们要把一个key拿出来做成数组,填到代码里面去做预制,那些十六进制数据看的是头晕眼花。如下一个小程序帮你解决问题,只需要放到linux下gcc编译出.o文件,再给执行权限即可把bin文件中的数据打印出来: 
#include"stdio.h" 
#include"stdlib.h" 
#include"string.h" 
 
#define FILE_NAME_LEN (256) 
typedef struct  
{ 
    FILE *fp; 
    char name[FILE_NAME_LEN]; 
    int file_len; 
    char buffer[188]; 
}File_info; 
 
 
/**************************************** 
   arg[0] : the executable file name  
   arg[1] : the source file name 
   arg[2] : the percent of empty packet  
****************************************/ 
int main(int argc, char * argv[]) 
{ 
 
    File_info file_in1; 
    int i  = 0; 
 
    memset(&file_in1,0,sizeof(File_info)); 
    if(argc < 2) 
    { 
        return -1; 
    } 
 
    if (argc >= 2) 
    { 
        memcpy(file_in1.name, argv[1], strlen(argv[1])) ; 
    } 
 
    file_in1.fp = fopen(file_in1.name, "rb") ; 
    if(file_in1.fp == NULL ) 
    { 
        printf("Error: Open file %s failed\n", file_in1.name) ; 
    }    
    /* get the length of file */ 
    fseek(file_in1.fp, 0L, SEEK_END) ; 
    file_in1.file_len = ftell(file_in1.fp); 
    fseek(file_in1.fp, 0, SEEK_SET) ; 
 
    while(file_in1.file_len > 0)  //(512-304) 
    { 
             memset(file_in1.buffer, 0, sizeof(file_in1.buffer)); 
        fread(file_in1.buffer,1,1,file_in1.fp); 
          //printf("file_in1.buffer[0]:0x%x\n", file_in1.buffer[0]); 
         printf("%X", (file_in1.buffer[0]>>4)&0xf); 
         printf("%X", file_in1.buffer[0]&0xf); 
         file_in1.file_len -= 1; 
    } 
 
    printf("\n"); 
    fclose(file_in1.fp) ; 
 
    return 1; 
} 
 
 
在运行.o文件,第一个参数填对应的bin文件名即可。 
 
 
 |