比方说,一个char类型数组。
char dada[4];
我们知道,其在计算机内都是二进制表示的,dada[4]刚好四个字节,共32位,我们假如它存贮的为某一商品的价格值,即一个整数值,现在,我们如何将存贮dada内的整数值取出来呢,因为直观上看它只不过是一个char类型的数组,我们是看不出它所表示的数值来。事实上,dada能表示的最大整数值为2的32次方减1。
    VC里面有什么方法中函数可以直接转换吗?还是得自己写函数转换?如果自己写有什么好的思路提供提供!

解决方案 »

  1.   

    char[3]*256*256*256 + char[2] *256*256 +char[1]*256 +char[0]
      

  2.   

    int val = *((int*)dada);
      

  3.   

    需要考虑高低位的问题 要么 char[2]*256*256*256+char[3]*256*256+char[0]*256+char[1]要么char[0]*256*256*256+char[1]*256*256+char[2]*256+char[3]
      

  4.   

    int val = *((int*)dada);////
    测试过,上面这个方法不对。
      

  5.   

    比方说:
    char dada[4]; 
    data[0]='d';//ASCII值为100
    data[1]=0;
    data[2]=0;
    data[3]=0;int val = *((int*)dada); 如果左边第0位为最低位,则val应该获取到得整数值应该为100,而经测试val获取到的值为-859045788
    倒较像一个地址值。
      

  6.   

    typedef union tagMYData
    {
    int nData;
    char szData[4];
    }UN_MYDATA;自己再去查查 union 吧,不多说了,费时间
      

  7.   

    另外,你需要先测试一下
    int 在你的机器里保存时的字节序
    szData要按这个顺序存
      

  8.   

    试一试用C++类型转换符reinterpret_cast。可以对数据进行重新解释为新类型,这样的转换依赖机器,不一定是安全的。
      

  9.   

    你的意思是 65656565元的商品 存在dada中是 AAAA ?想把 AAAA转成 65656565?
      

  10.   

    那好办的,用CStringCString sMoney="";
    for (int i=0;i<4;i++)
    {
    CString Tmp;
    if (dada[i]<10) Tmp.Format("0%d",dada[i]);
    else Tmp.Format("%d",data[i]);
    sMoney+=Tmp;
    }
    int iMoney=atoi(sMoney);
      

  11.   

    #include <stdlib.h>int money = atoi("1234");
    ASSERT(money == 1234);
      

  12.   

    查看MSDN,或百度
    atof, atoi, _atoi64, atol这几个函数的使用例子:#include <stdlib.h>
    #include <stdio.h>void main( void )
    {
       char *s; double x; int i; long l;   s = "  -2309.12E-15";    /* Test of atof */
       x = atof( s );
       printf( "atof test: ASCII string: %s\tfloat:  %e\n", s, x );   s = "7.8912654773d210";  /* Test of atof */
       x = atof( s );
       printf( "atof test: ASCII string: %s\tfloat:  %e\n", s, x );   s = "  -9885 pigs";      /* Test of atoi */
       i = atoi( s );
       printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );   s = "98854 dollars";     /* Test of atol */
       l = atol( s );
       printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
    }
      

  13.   

    //取出方法要和保存的方法相对应
    int i;
    char buf[4]; //保存
    i = 12345;
    memcpy(buf, &i, 4); //取出
    int *p = (int*)buf;
    i = *p;
    printf("%d",i);