• <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>

            Codejie's C++ Space

            Using C++

            C++:找BUG~


                下面有個函數,用于將6個字節的字符數組‘轉換’到12字節。例如:

            src[6= 0x120x340x560x780x9a0xbc }    
            dst[
            12= '1','2','3','4','5','6','7','8','9','a','b','c' }

                因為目標是字符串風格,為了顯示需要,dst實際使用的是13字節長度數組,如下:
            unsigned char dst[13];

            makeId(dst, src);

                函數如下,麻煩找下Bug。
            void ISLUtil::makeId(unsigned char* id, const unsigned char* ptr)
            {
                
            int i = 0;
                
            while(i < 6)
                
            {
                    unsigned 
            char t = *ptr >> 4;
                    
            if(t >= 0 && t <= 9)
                    
            {
                         
            *id = t + '0';
                    }

                    
            else if(t >= 0x0a && t <= 0x0f)
                    
            {
                        
            *id = t + 'a';
                    }

                    
            else
                    
            {
                        
            *id = 0;
                    }

                    
                    t 
            = (*ptr & 0x0F);
                    
            ++ id;
                    
            if(t >= 0 && t <= 9)
                    
            {
                        
            *id = t + '0';
                    }

                    
            else if(t >= 0x0a && t <= 0x0f)
                    
            {
                        
            *id = t + 'a';
                    }

                    
            else
                    
            {
                        
            *id = 0;
                    }

                    
                    
            ++ ptr;
                    
            ++ id;
                    
            ++ i;
                }

                id[
            12= '\0';
            }


            <----郁悶的分割線---->

                Y的,白癡的錯誤搞了我兩天。。。。

            posted on 2011-01-18 17:10 codejie 閱讀(1987) 評論(18)  編輯 收藏 引用 所屬分類: C++隨筆而已

            評論

            # re: C++:找BUG~[未登錄] 2011-01-18 18:24 kkk

            把兩個 *id = 0都改成
            *id = '0';  回復  更多評論   

            # re: C++:找BUG~ 2011-01-18 18:25 hello

            *id = t + 'a';
            應為
            *id = t - 10 + 'a';

            封裝
            inline unsigned char digit2char(unsigned char d)
            {
            assert(d < 0x10);
            if (d < 10)
            {
            return d +'0';
            }
            else
            {
            return d - 10 + 'a';
            }
            }  回復  更多評論   

            # re: C++:找BUG~ 2011-01-18 18:35 w

            inline unsigned char digit2char(unsigned char d)
            {
            assert(d < 0x10);
            return "0123456789abcdef"[d];
            }  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 18:55 Lucifer

            #include<stdio.h>
            unsigned char src[6] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc};
            void makeId(unsigned char* id, const unsigned char* ptr)
            {
            int i = 0;
            while(i < 6)
            {
            unsigned char t = *ptr >> 4;
            if(t >= 0 && t <= 9)
            {
            *id = t + '0';
            }
            else if(t >= 0x0a && t <= 0x0f)
            {
            *id = t + 'a'-10;
            }
            else
            {
            *id = 0;
            }

            t = (*ptr & 0x0F);
            ++ id;
            if(t >= 0 && t <= 9)
            {
            *id = t + '0';
            }
            else if(t >= 0x0a && t <= 0x0f)
            {
            *id = t + 'a'-10;
            }
            else
            {
            *id = 0;
            }

            ++ ptr;
            ++ id;
            ++ i;
            }
            *id = '\0';
            }
            int main()
            {
            unsigned char dst[13];

            makeId(dst, src);
            puts((char*)dst);
            return 0;
            }  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 21:25 codejie

            @kkk
            恩,可以這樣。但這里設置為0,而不是‘0’,用于代表出錯情況。  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 21:26 codejie

            @hello
            是的。一看就是搞C++的,喜歡封裝。。。  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 21:28 codejie

            @w
            太有創意了。。  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 21:31 codejie

            @Lucifer
            要是按照中國教育標準看,這個是標準答案。。。我是找了兩天才發現。。。
            最關鍵是就是最后的那個--‘*id = '\0';‘我直接id[12]=0,導致覆蓋其他數據了。。。白癡啊我。。。  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-18 21:31 codejie

            @all
            辛苦各位幫忙看代碼了,謝謝啊~  回復  更多評論   

            # re: C++:找BUG~ 2011-01-19 02:34 電腦知識與技術博客

            哈哈哈,做事要細心啊  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-19 10:01 haha

            據說在每一個軟件公司里,都有一個掃地的老太太。很偶然地,當她經過一個程序員的身邊,掃一眼屏幕上的代碼,會低聲提醒對方說:小心,緩沖溢出了。  回復  更多評論   

            # re: C++:找BUG~ 2011-01-19 10:54 codejie

            @haha
            您好,掃地老太太~哈哈~  回復  更多評論   

            # re: C++:找BUG~ 2011-01-19 11:10 abeng

            字符數組在初始化時必須有'\0'結束吧?  回復  更多評論   

            # re: C++:找BUG~[未登錄] 2011-01-19 11:50 Max

            我手頭上也有一些問題要提問...能夠幫我找下嗎? thanks.
            Q1: 下列那邊有問題?

            class A
            {
            A(){};
            protected:
            double _a;
            public:
            A(double a) : _a(a) {}

            double eval(double a1)
            {
            return _a * a1;
            }
            virtual ~A(){}
            };

            class B : public A
            {
            public:
            double eval( double b )
            {
            _a = _a * b;
            return _a;
            }
            };

            class C
            {
            public:
            C() : _myA(0) {}
            double _a;
            A* _myA;
            ~C()
            {
            if ( _myA != 0 )
            delete _myA;
            }
            };

            class D : public A, public C
            {
            public:
            int run(double d) { return d + _a; }
            };

            Q2:以下找出錯誤跟可能的危險

            void main()
            {
            A* testB = new B;
            double testVal = b.eval( 4.0 );
            C testC;
            testC._myA = new A(4);
            C testC2 = testC;
            D testD;
            int testVal2 = testD.run( 3.0 );
            delete testB;
            }

            Q3:以下程式那邊造成complier有問題? 可以保留SetValue的Const-ness嗎? 如果可以,怎麼修改?
            class cTest
            {
            public:
            cTest(){};
            ~cTest(){};

            void SetValue( const double val ) const
            {
            m_value = val;
            }

            private:
            double m_value;
            };

            Q4:以下程式是否有memory leak問題, 如果有,怎麼避免?
            class cTest
            {
            public:
            cTest(){};
            ~cTest(){};

            private:
            double m_double[100];
            };

            void function( cTest* test )
            {
            delete test;
            test = new cTest();
            }

            void main( void )
            {
            cTest *t = new cTest();
            function( t );
            delete t;
            }  回復  更多評論   

            # re: C++:找BUG~ 2011-01-19 12:23 codejie

            @abeng
            這個到不一定,要看實際需要了,畢竟并不是所有的字符數組要做字符串用的,也許就是個字符集會呢?  回復  更多評論   

            # re: C++:找BUG~ 2011-01-19 12:35 codejie

            @Max
            兄弟,你這不是找bug啊,是在出考試題吧。。。  回復  更多評論   

            # re: C++:找BUG~ 2011-01-26 12:36 xiang_kgd

            for ( i = 0; i < 6; i++){
            sprintf(dest[i*2],"%02x",(unsigned char)src[i]);
            }  回復  更多評論   

            # re: C++:找BUG~ 2011-01-26 12:55 codejie

            @xiang_kgd
            dest前面要不要加個&號?話說,我不喜歡sprintf...  回復  更多評論   

            公告

            Using C++

            導航

            統計

            留言簿(73)

            隨筆分類(513)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产精品亚洲艾草网美妙| 久久天天躁狠狠躁夜夜av浪潮 | 久久久噜噜噜久久熟女AA片| 久久九九精品99国产精品| 久久人人妻人人爽人人爽| 色综合久久中文综合网| 国产精品乱码久久久久久软件| 99久久中文字幕| 无码AV中文字幕久久专区| 久久乐国产精品亚洲综合| 97精品依人久久久大香线蕉97| 日韩一区二区三区视频久久| 国产99久久久国产精免费| 国产精品欧美久久久天天影视| 久久久久国产精品嫩草影院 | 97久久香蕉国产线看观看| 人妻系列无码专区久久五月天| 久久久久人妻一区精品色| 久久伊人色| 伊人久久综在合线亚洲2019| 国产精品一久久香蕉产线看| 久久国产高清一区二区三区| 久久久久久综合一区中文字幕 | 国产一久久香蕉国产线看观看 | 一本久久a久久精品综合夜夜| 精品久久久久久中文字幕大豆网| 久久国产成人午夜AV影院| 久久99国产精品尤物| 日本精品久久久久中文字幕8| 婷婷久久久亚洲欧洲日产国码AV| 天天综合久久一二三区| 久久久久无码专区亚洲av| 香蕉久久一区二区不卡无毒影院| 人妻无码中文久久久久专区| 人妻无码αv中文字幕久久琪琪布| 2021国产精品久久精品| 久久亚洲AV无码精品色午夜麻豆| 精品伊人久久久| 久久一日本道色综合久久| 色婷婷综合久久久中文字幕| 久久久亚洲欧洲日产国码二区|