在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文件名即可。
|