搜索
 找回密码
 立即注册

简单一步 , 微信登陆

把HDCP key的bin文件转换成数组的小程序

作者:halleyhuang | 时间:2016-7-20 11:44:28 | 阅读:5195| 只看该作者
在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文件名即可。


收藏
收藏0
分享
分享
点赞
点赞0
反对
反对0
该会员没有填写今日想说内容.
回复

使用道具 举报

大神点评1

沙发#
bean.yang 发表于:2016-7-22 09:10:46
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
手机版