SuperIC社区_
标题: 把HDCP key的bin文件转换成数组的小程序 [打印本页]
作者: halleyhuang    时间: 2016-7-20 11:44
标题: 把HDCP key的bin文件转换成数组的小程序
在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文件名即可。
作者: bean.yang    时间: 2016-7-22 09:10
| 欢迎光临 SuperIC社区_ (/) | 
Powered by Discuz! X3.3 |