悲剧的调试

今天的调试问题多多:

1 : string a = char * b;

       这里a并不知道b的长度 因此会在/0 处截断 这样子如果把string 做 存储二进制数据用 必然会错。。。

        解决办法:

         1: 在类中纪录长度

         2: 在内存中存储ascii码形式的二进制数据 读出写入的时候 记得要做个转化 详见我的中心站网管程序 NMCStation 中的 getBinaryEncrypt那几个函数

2: char a= 0xef; 

       if(a>=0x10) 这样比较大小竟然不行。。。 不知道为什么现在。。。

       int a = 0xef;

       if(a>=0x10) 这样子比较是可以的 但是如果是从正常的char 直接强制转化为int 则会在前面补充上三个字节的 0xff 这样就被拒了。。。 

        解决办法: a = a&0x000000FF;

3:

      string ipStr = "99.1.1.201";

       uint32_t ip = inet_addr(ipStr.c_str());   这个函数,经常用到 

         并且 ip 多数情况是个10位数字 除非是 0.xx.xx.xx 这种情况。。。 有可能么?

4:   32位计算机的long int 和 int 长度是一样的

      调用atoi 与 atol 函数都是一样的 最多只能得到 2^31 这么大的数字

      如果想要更大的数字 

       1: 注意这种情况

                 ip a = strtoul(b.c_str(),NULL,10); 这样就行 

        2: 分段处理咯 我就是这么搞的

5: eclipse 使用不熟悉啊。。。

       注意memory browser expressions 等的用法。。。

收工 睡觉!

posted @ 2011-10-10 01:14  王帅901  阅读(148)  评论(0编辑  收藏  举报