• 葛红亮:老“马”识途,中马关系不会逆转 2019-07-18
  • 让协商民主优势得以充分发挥 2019-07-16
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-07-10
  • [大红包]——有神论者是客观唯心主义派别的三种世界观。无神论者是主观唯心主义、客观唯物主义和主观唯物主义三个派别的九种世界观!!!! 2019-07-10
  • 一语惊坛(6月8日):友谊勋章是给国际友人的最高荣誉。 2019-07-08
  • 【理上网来辉煌十九大】不忘初心,续写民族复兴新辉煌 2019-07-08
  • 【端午节民俗地图】河南鲁山端午槲坠:深山槲叶悠悠香 2019-07-05
  • 与香港市民携手 以社区活动保护环境 2019-07-05
  • 起底“网络黑手” 谁盗走了你的个人信息? 2019-06-29
  • 汕尾,一座不想离开的城文章中国国家地理网 2019-06-29
  • 吸引港澳多所学校报名参赛 2019-06-25
  • 县名解析——黄河新闻网 2019-06-24
  • 【理上网来喜迎十九大】美国丹佛大学孙晶:中国是世界“平稳的基石” 2019-06-23
  • 国家统计局:服务业企业经营收入增长加快 利润增长 2019-06-22
  • 速度与趣萌 萌娃自行车赛不用踏板 2019-06-12
  • 河南今天11选5走势图 > 技术文章 > Symbian > symbian 入门系列 -- TBufC和TBuf

    河南福彩22选5走势图:symbian 入门系列 -- TBufC和TBuf

    河南今天11选5走势图 2005年6月3日 cysnew            评论:1条 查看 我来说两句

    接下来,介绍一下TBufC和TBuf的基础知识。
    ==================================================================================

    河南今天11选5走势图 www.9e4g.com            example from "epoc32ex\Base\BufsAndStrings\Desc\buffer"

    ==================================================================================

    1.    定义
     
          Build independent non-modifiable buffer descriptor.

          This is a descriptor class which provides a buffer of fixed length for containing and accessing TText data.

          说明这是一个descriptor类,提供了固定长度的buffer,不可修改,用于访问和使用 TText 类型的数据。

    2.   继承关系

           根据是否为支持Unicode,TBufC继承自两个不同的类TBufCBase8,TBufCBase16。

            TBufC--> TBufCBase16--> TDesC16?;蛘?nbsp;TBufC--> TBufCBase8--> TDesC8

           class TBufC: public TBufCBase16
        {
        ...
        protected:
        TText iBuf[__Align(S)];
        };

            从类结构定义中可以看出,TBufC保存的是TText 类型的数据。而TText 的定义为:

            typedef TText16 TText; 或者  typedef TText8 TText;
          
            而扩展定义为 typedef unsigned char TText8;  typedef unsigned short int TText16;可以看出,为了支持Unicode,TText16定义为

          16 bits的字符。

            从其继承的类结构中(TDesC16,TDesC8)也可以看出TBufC类具有当前数据长度。长度可以通过函数length获得。

            但是size()根据不同的编译条件返回不同的字节数目,这一点和TBuf8不同,TBuf8中size()和length()返回的值永远相同。

    3.   位置

          如果声明为自动变量,则保存在stack上。

    4.   使用

           因为在TBufC中保存的是TText;类型,在Unicode下,也就是unsigned short int类型的数据,所以可以通过TText数组赋值。TText数组

    包含C语言类型的字符串(NULL结尾),也可以放置Unicode码,用于初始化。如下所示:

       ---------------------------------------------------------------------------------------------------
            初始化和赋值
       ---------------------------------------------------------------------------------------------------
            TText cstr[13] =  {0x0042, ''e'' ,''l'' ,''l'' ,''o'', '' '',
                           ''W'', ''o'',''r'', ''l'', ''d'', ''!'', ''\0''};

        TText cstr[3] =  {0x0042, 0x53e4,0x0000};

        // Construct a TBufC using the NULL 
        // terminated string in cstr to initialise it.

        TBufC<16> bufc1(&cstr[0]);

    /*------------------------另外一种赋值方法----------------------- -----------*/
        _LIT(KTxtHelloWorld,"Hello World!");

        TBufC<16> bufc2(KTxtHelloWorld);
                  /*------------------------我们不能更改存储的单个部分,但是可以整个替换-----*/
                 /*-------------------------但是要注意替换的字符长度不能超过目标的长度 ------*/

        _LIT(KTxtRepText,"Replacement text");

        bufc2 = KTxtRepText;


       ---------------------------------------------------------------------------------------------------
                        取得长度和size
       ---------------------------------------------------------------------------------------------------    

        bufc1.Length();  // Length指的是存储的字符数目
                       bufc1.Size()   // size指的是存储的字节数

       ------------------------------------------------------------------------------------------  
                       数据段地址
       ------------------------------------------------------------------------------------------   
        bufc1.Ptr()   // 可以利用Ptr()函数取得数据段的地址,Ptr()的返回值是
                 const TUint16
       
        -----------------------------------------------------------------------------------------   
                      Des()函数的使用和利用TPtr访问TBufC
         ----------------------------------------------------------------------------------------
      
    // 可以利用Des()函数返回一个指向TBufC的TPtr。利用这个TPtr可以访问TBufC
        TPtr ptr = bufc2.Des();
        ptr.Ptr(), // 这个返回的地址和bufc2.Ptr()返回的地址相同
                       ptr.Length(),
        ptr.Size()
        ptr.MaxLength() // 可以取得最大的存储空间长度
    // 可以利用Des()函数返回一个指向TBufC的TPtr。利用这个TPtr可以更改
       TBufc的内部数据
        _LIT(KTxtAndHi," & Hi");
        ptr.Delete((ptr.Length()-1),1); // 删除其中的某个位
        ptr.Append(KTxtAndHi);    // append字符,注意不要超过空间限制
         ----------------------------------------------------------------------------------------   
    5.   存储方式

        TBufC的存储方式如下所示:
        
                           |   head  |  content |

        class TDesC16
            {
        ......
        #if defined(__DESC_NO_BIT_FIELDS__)
        TUint iLength;
        #else
        unsigned int iLength:28;
        unsigned int iType:4;
        #endif
        __DECLARE_TEST;
            };
       其中head包括fixed length 和 type。从类的结构定义可以看出,head占用4个字节,其中长度为28个bit,而type为4个bit。

       所以数据只能表示25千万个字符了。并且数据区和整个的descriptor的地址偏移4个字节。

    6. TBuf

           TBuf的基本属性和TBufC类似,只是TBuf可以允许更改。
       
       ------------------------------------------------------------------------------------------
            初始化和赋值
       ------------------------------------------------------------------------------------------

          TBuf<16> buf(KTxtHelloWorld);

       ------------------------------------------------------------------------------------------
            更改数据
       -------------------------------------------------------------------------------------------
        // The data can be modified
        buf.Append(''@'');

        // Length can be changed;
        buf.SetLength(3);

        // Length can be zeroised;
        buf.Zero();
        
        // The data can be replaced entirely  using the assignment operator.
        buf = KTxtRepText;
    (www.9e4g.com)

    读取...
    相关报道
    评 论
    1楼 52RD网友 202.130.*.* 发表于 2007-2-27 12:29 回复
    强力推荐一款不错的软件...

    该软件是一款在您上网冲浪时,赚取上网费用的软件。
    本软件无须您点击任何广告,也不会耽误您上网冲浪或打游戏的时间。
    您只需要运行一次软件,每次开机后软件会自动启动。
    系统会自动累计积分,积分交易以后变成现金,现金将会转入您的帐户。
    心动了吧,那就赶快注册一个吧!让她帮你赚出上网费吧!(使用方法如下)

    1.通过 //www.ddvan.com/register.asp?inohsslwl 注册
    2.下载软件
    3.请保证两周内最少增长10点积分,否则系统会认为放弃该帐号

    自已用用,就道她有多方便了~_~

    共有评论1篇 查看所有评论
    文章导航 Navigation
    精彩评论 Commentmore...
    赞助商链接 Support
    特别推荐 Recommend
  • 葛红亮:老“马”识途,中马关系不会逆转 2019-07-18
  • 让协商民主优势得以充分发挥 2019-07-16
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-07-10
  • [大红包]——有神论者是客观唯心主义派别的三种世界观。无神论者是主观唯心主义、客观唯物主义和主观唯物主义三个派别的九种世界观!!!! 2019-07-10
  • 一语惊坛(6月8日):友谊勋章是给国际友人的最高荣誉。 2019-07-08
  • 【理上网来辉煌十九大】不忘初心,续写民族复兴新辉煌 2019-07-08
  • 【端午节民俗地图】河南鲁山端午槲坠:深山槲叶悠悠香 2019-07-05
  • 与香港市民携手 以社区活动保护环境 2019-07-05
  • 起底“网络黑手” 谁盗走了你的个人信息? 2019-06-29
  • 汕尾,一座不想离开的城文章中国国家地理网 2019-06-29
  • 吸引港澳多所学校报名参赛 2019-06-25
  • 县名解析——黄河新闻网 2019-06-24
  • 【理上网来喜迎十九大】美国丹佛大学孙晶:中国是世界“平稳的基石” 2019-06-23
  • 国家统计局:服务业企业经营收入增长加快 利润增长 2019-06-22
  • 速度与趣萌 萌娃自行车赛不用踏板 2019-06-12
  • 2019天线宝宝一波中特 北京pk105码两期计划 曾道人二肖中特 爱彩网主页 千万亿团连码专家六肖复式 江西时时彩官方平台 丽水广东牛牛技巧 120六肖中特 好运彩3平台 赛马会帽子 今天四川快乐12预测号 六合彩开奖 秒速飞艇独胆技巧 陕西快乐十分任三口诀 北京快3和值推荐