请问在VC下面,int,float等基本数据类型怎么转换成字节?两者之间的转换关系是怎样的?
    例如知道float占4个字节,如果得到1个字节流,占4个字节,我想将这个字节流转换成其对应的float类型,请问怎么实现?在VC里面有什么函数能够实现两者之间的相互转换吗?

解决方案 »

  1.   

    "转换成字节"是什么意思?float f;
    int i;
    char szTemp[32];f = 0.5f;
    i = 8;
    sprintf( szTemp, "%d", i );  //转换成字符型
    sprintf( szTemp, "%3.2f", f );  //转换成字符型
    scanf( szTemp, "%3.2f", &f );   //转换成float型
    strcpy( szTemp, "4" );
    i = atoi( szTemp );       //转换成int型
      

  2.   

    int
    atoi(..) 
    float
    atof(..)
      

  3.   

    把这4为截取出来,再atof转换
      

  4.   

    char *ptr 指向四位数据开始位置(浮点数好象8位吧)
    float f = *(float*) ptr;
      

  5.   

    我们先定义一些常见类型变量借以说明int i = 100;
    long l = 2001;
    float f=300.2;
    double d=12345.119;
    char username[]="程佩君";
    char temp[200];
    char *buf;
    CString str;
    _variant_t v1;
    _bstr_t v2;一、其它数据类型转换为字符串
    短整型(int)
    itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
    itoa(i,temp,2); ///按二进制方式转换 
    长整型(long)
    ltoa(l,temp,10); 
    浮点数(float,double)
    用fcvt可以完成转换,这是MSDN中的例子:
    int decimal, sign; 
    char *buffer; 
    double source = 3.1415926535; 
    buffer = _fcvt( source, 7, &decimal, &sign ); 
    运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
    decimal表示小数点的位置,sign表示符号:0为正数,1为负数 
    CString变量
    str = "2008北京奥运";
    buf = (LPSTR)(LPCTSTR)str; 
    BSTR变量
    BSTR bstrValue = ::SysAllocString(L"程序员"); 
    char * buf = _com_util::ConvertBSTRToString(bstrValue); 
    SysFreeString(bstrValue); 
    AfxMessageBox(buf); 
    delete(buf); 
    CComBSTR变量
    CComBSTR bstrVar("test"); 
    char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); 
    AfxMessageBox(buf); 
    delete(buf); _bstr_t变量
    _bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
    _bstr_t bstrVar("test"); 
    const char *buf = bstrVar;///不要修改buf中的内容 
    AfxMessageBox(buf); 
    通用方法(针对非COM数据类型)
    用sprintf完成转换
    char  buffer[200];
    char  c = '1';
    int   i = 35;
    long  j = 1000;
    float f = 1.7320534f;
    sprintf( buffer, "%c",c);
    sprintf( buffer, "%d",i);
    sprintf( buffer, "%d",j);
    sprintf( buffer, "%f",f);
      

  6.   

    二、字符串转换为其它数据类型
    strcpy(temp,"123"); 短整型(int)
    i = atoi(temp); 
    长整型(long)
    l = atol(temp); 
    浮点(double)
    d = atof(temp); 
    CString变量
    CString name = temp; 
    BSTR变量 
    BSTR bstrValue = ::SysAllocString(L"程序员"); 
    ...///完成对bstrValue的使用
    SysFreeString(bstrValue); CComBSTR变量
    CComBSTR类型变量可以直接赋值
    CComBSTR bstrVar1("test");
    CComBSTR bstrVar2(temp);_bstr_t变量
    _bstr_t类型的变量可以直接赋值
    _bstr_t bstrVar1("test"); 
    _bstr_t bstrVar2(temp); 
    三、其它数据类型转换到CString
    使用CString的成员函数Format来转换,例如:
    整数(int)
    str.Format("%d",i); 
    浮点数(float)
    str.Format("%f",i); 
    字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
    str = username; 
    对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。
      

  7.   

    楼上的这位兄弟,谢谢你的这些资料,但是我所想要知道的不是基本数据类型之间的转换,我想知道的是:
        在网络上以字节流的形式传递数据,这些字节流可以按照某种协议分解成一系列的数据,就拿最简单的,比方说在这个字节流中,知道其中的某些字节共同代表一个float类型的数据,现在我想将此字节流中的这些字节取出来还原成其对应的float类型的数据,请问应该怎么做?
      

  8.   

    可以参考一下Tcp/ip它的数据格式定义
      

  9.   

    你说得不可能
    你获得字节流时,必需有你自己约定好的格式。
    否则,就像你不知道tcp/ip的数据包格式而你收到以后就把它全都当成是显示字符来显示一样可笑解析,是按照一定的格式来读取数据,而不是随便读取,那就不叫解析
    格式是必需约定的
      

  10.   

    按照你约定好的数据包格式如果有多种格式,肯定首先收到的是数据包格式的代表字符,然后再按照这种格式来读取数据。
    比如你约定了两种格式,一种里float以8字节来表示,另一种里float以6字节表示,那么在你读取的时候,按照是一格式还是二格式来读取,然后再转换成float型
      

  11.   

    这个问题已经解决,用memcpy即可。