• <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 閱讀(1988) 評論(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)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲一区精品伊人久久伊人| 97久久精品人妻人人搡人人玩| 精品人妻伦一二三区久久| 大香网伊人久久综合网2020| 久久综合鬼色88久久精品综合自在自线噜噜| 亚洲国产综合久久天堂| 一本色道久久HEZYO无码| 曰曰摸天天摸人人看久久久| 国产亚洲精久久久久久无码77777| 欧美熟妇另类久久久久久不卡| 久久99国产精品久久99果冻传媒| 伊人精品久久久久7777| 久久男人Av资源网站无码软件| 潮喷大喷水系列无码久久精品| 欧美伊香蕉久久综合类网站| 亚洲国产成人精品无码久久久久久综合| 99久久久久| 精品久久久久久国产| 99久久精品国产综合一区| 久久久久久久97| 久久人人爽人人爽人人片AV东京热 | 亚洲午夜精品久久久久久app| 人妻无码αv中文字幕久久 | 亚洲国产精品一区二区久久hs | 无码人妻久久一区二区三区 | 国产成人精品久久免费动漫| 欧美精品一区二区久久| 日本精品久久久中文字幕 | 伊人久久大香线蕉亚洲五月天| 久久国产精品波多野结衣AV| 麻豆精品久久久一区二区| 亚洲色大成网站WWW久久九九| 久久人人青草97香蕉| 久久噜噜久久久精品66| 国产精品日韩深夜福利久久| 国产一区二区精品久久 | 亚洲乱码日产精品a级毛片久久| 91精品国产9l久久久久| 久久er热视频在这里精品| 99久久精品国产一区二区三区| 九九久久99综合一区二区|