halleyhuang 发表于 2016-7-20 11:44:28

把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;
    int file_len;
    char buffer;
}File_info;


/****************************************
   arg : the executable file name
   arg : the source file name
   arg : 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, strlen(argv)) ;
    }

    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:0x%x\n", file_in1.buffer);
         printf("%X", (file_in1.buffer>>4)&0xf);
         printf("%X", file_in1.buffer&0xf);
         file_in1.file_len -= 1;
    }

    printf("\n");
    fclose(file_in1.fp) ;

    return 1;
}


在运行.o文件,第一个参数填对应的bin文件名即可。


bean.yang 发表于 2016-7-22 09:10:46

:hug:
页: [1]
查看完整版本: 把HDCP key的bin文件转换成数组的小程序