• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 51, 文章 - 1, 評(píng)論 - 41, 引用 - 0
            數(shù)據(jù)加載中……

            printf(“0x02x”,data[i])的問題

            遇到如下代碼:

            #include <stdio.h>
            int main() {
                const char data[] = {0x12, 0x80, 0x40};
                int i;
               
                for (i=0; i<sizeof(data)/sizeof(data[0]); ++i) {
                    printf("%02X, ", data[i]);
                }
                return 0;
            }

            輸出結(jié)果為:12, FFFFFF80, 40,

            期望結(jié)果應(yīng)該是:12, 80, 40,

            雖然知道是無(wú)符號(hào)有符號(hào)整型類型提升的問題,但也花了不少時(shí)間理順其邏輯。

            1. 首先printf的可變參數(shù)期望是int型,因此data[i]會(huì)提示至int。

            2. data[i]為char型,提升時(shí)會(huì)帶符號(hào),0x80表示-128,而int型表示為0xFFFFFF80。

            3. %02X表示長(zhǎng)度小于2用0填充,而不是截?cái)酁殚L(zhǎng)度2。

            問題的根源在于data的定義不嚴(yán)謹(jǐn),應(yīng)該定義為unsigned char。

            posted on 2014-06-18 22:25 lemene 閱讀(1060) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            欧美亚洲国产精品久久| 久久久亚洲欧洲日产国码是AV | 欧美亚洲国产精品久久高清 | 久久久久这里只有精品| 一级a性色生活片久久无少妇一级婬片免费放 | 思思久久精品在热线热| 97精品久久天干天天天按摩| 色综合久久中文色婷婷| 99久久无码一区人妻a黑| 66精品综合久久久久久久| 一本久久a久久精品综合香蕉 | 久久久久久久国产免费看| 亚洲综合精品香蕉久久网| 91亚洲国产成人久久精品网址| 思思久久好好热精品国产| 日本三级久久网| 97精品国产97久久久久久免费| 99久久免费只有精品国产| 亚洲精品国精品久久99热一| 久久影视国产亚洲| 久久se精品一区二区| 国内精品久久久久影院薰衣草| 久久香蕉综合色一综合色88| 久久99精品久久久久久动态图 | 精品久久久噜噜噜久久久 | 久久九九免费高清视频| 99国产欧美精品久久久蜜芽| 99久久做夜夜爱天天做精品| 久久亚洲精品无码播放| 久久人人爽人人精品视频| 亚洲综合精品香蕉久久网97| 国产精品对白刺激久久久| 日韩精品久久无码人妻中文字幕| 久久毛片一区二区| 一本色道久久88精品综合| 欧美激情一区二区久久久| 精品久久久久久久国产潘金莲 | 久久久这里有精品中文字幕| 国产女人aaa级久久久级| 久久精品18| 午夜视频久久久久一区|