背景

2c3521a4edff88f7854d7b0bc310f596

在进行与竟品的性能对比中,需要知道竟品的部分参数,与竟品对齐参数后再进行性能测试。

在 hook TikTok 的摄像头输出参数时发现,PixelFormatType 的值是整数 875704422,这样的一串整数很难知道其含义。

分析

a9ecba8f3f6a0b41acdcb63637f60e80

从 key PixelFormatType 可以猜出是 kCVPixelFormatType 枚举中的一个,kCVPixelFormatType 枚举中大部分的值是以 '420f' 这样的单引号形式来表示,通过逐一对比知道,原来 875704422 对应的就是 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 的值,也就是 '420f'

c0a3caf746deb9cd89ff242957ab9b9e

那么,为什么 875704422 == '420f' ?

原来,可以通过 ascii 编码进行转换,以 '420f' 为例:

4/2/0/f 的 ascii 编码分别为 52/50/48/102 ,转换为二进制分别为 00110100/00110010/00110000/01100110,合并起来 00110100001100100011000001100110 转换为十进制,刚好就是 875704422

c5094241625b01a9af3fd7c370e78bb8

为方便看出对应的字符串,写了以下转换算法:

转换算法

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;
}