怎样将浮点数(float)转换成16进制字符串即0x0000 0000类型的显示出来整数int y 很容易str>Format("%X",y);浮点数就不行了,结果都是0x0

解决方案 »

  1.   

    可能需要先将float转换为CString,然后去除小数点,然后转换为两部分int,然后在转换为CString
    然后将两个CString相加,即连接。
      

  2.   

    CString s;
    double f=12.34;
    int i3,i4;
    s.Format("%2.2f",f);
    char a3[4],a4[4];
    sscanf(s,"%[^.].%[^.]",a3,a4);
    i3=atoi(a3);
    i4=atoi(a4);
    s.Format("0x%X.%X",i3,i4);
    AfxMessageBox(s);
      

  3.   

    不知道你是要直接把float的内部存储格式直接转换成16进制来观察,还是要先将float舍去小数部分然后转换成16进制?
    前者:str.Format("%x", f);
    后者:str.Format("%x", (int)f);
      

  4.   

    要直接把float的内部存储格式直接转换成16进制来观察
      

  5.   

    str.Format("%x", f);
    这个我早都试过了!不行!要按位还是有别的函数?
      

  6.   

    就像steedhorse(晨星)所说的,以小数点为界,将小数点前面的整数部分和小数部分分别转换。
    前者:str.Format("%x", (int)f);
    后者:取得小数部分的位数,并将其转化为整数nf
       str.Format("%x", nf);
    之后,合起来就是了
      

  7.   

    不行就这样:float f = ……;
    unsigned int * p = reinterpret_cast<unsigned int*>(&f);
    printf("%08x", *p);
      

  8.   

    我转过。看我的。
    FLOAT i;
    CString strShow;
    strShow.Format(_T("%X"), *((DWORD*) (&i)));
    就是这样了。
      

  9.   

    多谢各位!
    看我的结果————
    unsigned char *q;// 文件数据写入的中间转换变量
    unsigned char ch0,ch1,ch3,ch2;
     CString str20,str10,str30,str31,str32,str33;  
    q=(unsigned char *)&Float;//地址类型强制转换《《《-----关键是这里!!!呵呵
    ch0=*q;
    ch1=*(q+1);
    ch2=*(q+2);
    ch3=*(q+3); str30.Format("%2X",(unsigned int)ch0);
    str31.Format("%2X",(unsigned int)ch1);
    str32.Format("%2X",(unsigned int)ch2);
    str33.Format("%2X",(unsigned int)ch3);
    str10="浮点数用十六进制表示是0X";
    str20=str10+str30+str31+str32+str33;
    依次读出四个字节的内容到char变量中,再str.Format("%X",(unsigned)ch)关键是地址类型强制转换!