<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>C on Axqora 博客</title>
    <link>https://blog.axqora.com/tags/c/</link>
    <description>Recent content in C on Axqora 博客</description>
    <image>
      <title>Axqora 博客</title>
      <url>https://blog.axqora.com/icon.png</url>
      <link>https://blog.axqora.com/icon.png</link>
    </image>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 01 Sep 2021 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.axqora.com/tags/c/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>C 语言中利用单引号表示整数</title>
      <link>https://blog.axqora.com/posts/c-int-express/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.axqora.com/posts/c-int-express/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;2c3521a4edff88f7854d7b0bc310f596&#34; loading=&#34;lazy&#34; src=&#34;https://blog.axqora.com/image/C-Int-Express/5341CE7D-7880-43CE-9C7B-C0799EB766A8.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;在进行与竟品的性能对比中，需要知道竟品的部分参数，与竟品对齐参数后再进行性能测试。&lt;/p&gt;
&lt;p&gt;在 hook TikTok 的摄像头输出参数时发现，&lt;code&gt;PixelFormatType&lt;/code&gt; 的值是整数 &lt;code&gt;875704422&lt;/code&gt;，这样的一串整数很难知道其含义。&lt;/p&gt;
&lt;h2 id=&#34;分析&#34;&gt;分析&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;a9ecba8f3f6a0b41acdcb63637f60e80&#34; loading=&#34;lazy&#34; src=&#34;https://blog.axqora.com/image/C-Int-Express/ABCC4B74-B0BC-42F5-A2F0-395E4D7E5F9F.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;从 key &lt;code&gt;PixelFormatType&lt;/code&gt; 可以猜出是 &lt;code&gt;kCVPixelFormatType&lt;/code&gt; 枚举中的一个，&lt;code&gt;kCVPixelFormatType&lt;/code&gt; 枚举中大部分的值是以 &lt;code&gt;&#39;420f&#39;&lt;/code&gt; 这样的单引号形式来表示，通过逐一对比知道，原来 &lt;code&gt;875704422&lt;/code&gt; 对应的就是 &lt;code&gt;kCVPixelFormatType_420YpCbCr8BiPlanarFullRange&lt;/code&gt; 的值，也就是 &lt;code&gt;&#39;420f&#39;&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;c0a3caf746deb9cd89ff242957ab9b9e&#34; loading=&#34;lazy&#34; src=&#34;https://blog.axqora.com/image/C-Int-Express/043D4388-A0A4-458D-85EB-2CC1E51E5877.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;那么，为什么 &lt;code&gt;875704422 == &#39;420f&#39;&lt;/code&gt; ?&lt;/p&gt;
&lt;p&gt;原来，可以通过 ascii 编码进行转换，以 &lt;code&gt;&#39;420f&#39;&lt;/code&gt; 为例：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;4/2/0/f&lt;/code&gt; 的 ascii 编码分别为 &lt;code&gt;52/50/48/102&lt;/code&gt; ，转换为二进制分别为 &lt;code&gt;00110100/00110010/00110000/01100110&lt;/code&gt;，合并起来 &lt;code&gt;00110100001100100011000001100110&lt;/code&gt; 转换为十进制，刚好就是 &lt;code&gt;875704422&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;c5094241625b01a9af3fd7c370e78bb8&#34; loading=&#34;lazy&#34; src=&#34;https://blog.axqora.com/image/C-Int-Express/19F1ED01-810C-4226-B46E-7184A3F7F5DF.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;为方便看出对应的字符串，写了以下转换算法：&lt;/p&gt;
&lt;h2 id=&#34;转换算法&#34;&gt;转换算法&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NSString * changeToTypeStr(int value) {
    char *str = malloc(10);
    int count = 0;
    while (value &amp;gt; 0) {
        char ch = (char)(value &amp;amp; 0xFF);
        str[count] = ch;
        value = value &amp;gt;&amp;gt; 8;
        count ++;
    }
    if (count &amp;gt; 1) {
        int left = 0, right = count - 1;
        while (left &amp;lt; right) {
            char tmp = str[left];
            str[left] = str[right];
            str[right] = tmp;
            left ++;
            right --;
        }
    }
    str[count] = &amp;#39;\0&amp;#39;;
    NSString *res = [[NSString alloc] initWithUTF8String:str];
    free(str);
    return res;
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <content:encoded><![CDATA[<h2 id="背景">背景</h2>
<p><img alt="2c3521a4edff88f7854d7b0bc310f596" loading="lazy" src="/image/C-Int-Express/5341CE7D-7880-43CE-9C7B-C0799EB766A8.png"></p>
<p>在进行与竟品的性能对比中，需要知道竟品的部分参数，与竟品对齐参数后再进行性能测试。</p>
<p>在 hook TikTok 的摄像头输出参数时发现，<code>PixelFormatType</code> 的值是整数 <code>875704422</code>，这样的一串整数很难知道其含义。</p>
<h2 id="分析">分析</h2>
<p><img alt="a9ecba8f3f6a0b41acdcb63637f60e80" loading="lazy" src="/image/C-Int-Express/ABCC4B74-B0BC-42F5-A2F0-395E4D7E5F9F.png"></p>
<p>从 key <code>PixelFormatType</code> 可以猜出是 <code>kCVPixelFormatType</code> 枚举中的一个，<code>kCVPixelFormatType</code> 枚举中大部分的值是以 <code>'420f'</code> 这样的单引号形式来表示，通过逐一对比知道，原来 <code>875704422</code> 对应的就是 <code>kCVPixelFormatType_420YpCbCr8BiPlanarFullRange</code> 的值，也就是 <code>'420f'</code>。</p>
<p><img alt="c0a3caf746deb9cd89ff242957ab9b9e" loading="lazy" src="/image/C-Int-Express/043D4388-A0A4-458D-85EB-2CC1E51E5877.png"></p>
<p>那么，为什么 <code>875704422 == '420f'</code> ?</p>
<p>原来，可以通过 ascii 编码进行转换，以 <code>'420f'</code> 为例：</p>
<p><code>4/2/0/f</code> 的 ascii 编码分别为 <code>52/50/48/102</code> ，转换为二进制分别为 <code>00110100/00110010/00110000/01100110</code>，合并起来 <code>00110100001100100011000001100110</code> 转换为十进制，刚好就是 <code>875704422</code>。</p>
<p><img alt="c5094241625b01a9af3fd7c370e78bb8" loading="lazy" src="/image/C-Int-Express/19F1ED01-810C-4226-B46E-7184A3F7F5DF.png"></p>
<p>为方便看出对应的字符串，写了以下转换算法：</p>
<h2 id="转换算法">转换算法</h2>
<pre tabindex="0"><code>NSString * changeToTypeStr(int value) {
    char *str = malloc(10);
    int count = 0;
    while (value &gt; 0) {
        char ch = (char)(value &amp; 0xFF);
        str[count] = ch;
        value = value &gt;&gt; 8;
        count ++;
    }
    if (count &gt; 1) {
        int left = 0, right = count - 1;
        while (left &lt; right) {
            char tmp = str[left];
            str[left] = str[right];
            str[right] = tmp;
            left ++;
            right --;
        }
    }
    str[count] = &#39;\0&#39;;
    NSString *res = [[NSString alloc] initWithUTF8String:str];
    free(str);
    return res;
}
</code></pre>]]></content:encoded>
    </item>
  </channel>
</rss>
