通讯协议中数据类型有定义为整型的,好像是说定义整型更节约空间,但是在数据
包里都是以字符串存在的,才可能传输吧,那怎么体现出节约空间?
如一个包:"thisistest1234"在socket传输中肯定是作为一个字符串来传输,如果我把
"1234"这个字段作为整型,能体现节约空间吗?

解决方案 »

  1.   

    "thisistest1234" = > 14BYTE
    "thisistest"+int(1234) = 14BYTE
    "thisistest"+(short int)(1234) = 12BYTE如果是:
    "thisistest123467" = > 16BYTE
    "thisistest" + (unsigned int)(123467) = 14BYTE一个手的手指头数不过来了。。
      

  2.   

    int32整数 12345678(一千二百三十四) 在内存中占4个字节, ASCII编码的字符串 "12345678"(不包引号)在内存中占8个字节. 如果是Unicode编码, 占16个字节. 所以, 一般整数的编码比字符串的编码节省空间. 数据包里存储的是位, 字节.
      

  3.   

    还是不太明白,郁闷中:
    "thisistest123467" = > 16BYTE
    "thisistest" + (unsigned int)(123467) = 14BYTE
    ----------------------------------------------
    上面我是理解,在程序中整型占位肯定会少,比如:
    CString s="123456"
    int i=123456,肯定是i占的空间少,现在我不明白的是,我的SOCKET发送函数:
    SendMessage(char* SendBuffer),参数是字符型的,那我不是又得把int转成字符型再发吗?
    那不是发送的buffer又变成字符串存储了吗?何以能节约空间呢?
    就是这个发送函数,让我老是转不过弯来
      

  4.   

    SendMessage(char* SendBuffer) 参数只是一个指针,指向一个内存区域。CString s="123456"
    int i=123456,这样看你怎么分配缓冲区
    比如 int i=123456;
         char sz_i[4]={0};
         memcpy(sz_i,&i,sizeof(int));
         SendMessage(sz_i,4)     CString s="123456"
         SendMessage(s.getbuffer(),s.getlength());你看看那个节省空间?
      

  5.   

    那我不是又得把int转成字符型再发吗?转换操作并不是把int 转换成 字符型。指针的值和缓冲区的大小并没有改变,
    只是告诉编译器把这个int * 解释成 char *;