背景
在进行与竟品的性能对比中,需要知道竟品的部分参数,与竟品对齐参数后再进行性能测试。
在 hook TikTok 的摄像头输出参数时发现,PixelFormatType
的值是整数 875704422
,这样的一串整数很难知道其含义。
分析
从 key PixelFormatType
可以猜出是 kCVPixelFormatType
枚举中的一个,kCVPixelFormatType
枚举中大部分的值是以 '420f'
这样的单引号形式来表示,通过逐一对比知道,原来 875704422
对应的就是 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
的值,也就是 '420f'
。
那么,为什么 875704422 == '420f'
?
原来,可以通过 ascii 编码进行转换,以 '420f'
为例:
4/2/0/f
的 ascii 编码分别为 52/50/48/102
,转换为二进制分别为 00110100/00110010/00110000/01100110
,合并起来 00110100001100100011000001100110
转换为十进制,刚好就是 875704422
。
为方便看出对应的字符串,写了以下转换算法:
转换算法
NSString * changeToTypeStr(int value) {
char *str = malloc(10);
int count = 0;
while (value > 0) {
char ch = (char)(value & 0xFF);
str[count] = ch;
value = value >> 8;
count ++;
}
if (count > 1) {
int left = 0, right = count - 1;
while (left < right) {
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left ++;
right --;
}
}
str[count] = '\0';
NSString *res = [[NSString alloc] initWithUTF8String:str];
free(str);
return res;
}