c++中将float转换成字符数组,再将字符数组转换成float的问题

slassddd 2010-06-30 10:37:28
问题:
由float型变量0.1111111转换成字符数组39 8E E3 3D
由字符数组39 8E E3 3D转换成float型变量0.1111111
c#中有BitConveter可以方便的实现转换,不知C++中怎么实现

...全文
945 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeremyhuang81 2010-07-02
  • 打赏
  • 举报
回复
不好意思!!!
上面的main()函数中有一个写错了!

重新写一下!!

void main()
{
float y = 0.111111;

//测试方法一
string str = FloatToHex(y);
cout<<str.c_str()<<endl;
cout<<HexToFloat(str)<<endl;

//测试方法二
string str1 = FloatToHex_1(y);
cout<<str1.c_str()<<endl;
cout<<HexToFloat_1(str1)<<endl;
}


纳闷了?为什么测试方法二不行了?大侠解答吧!
jeremyhuang81 2010-07-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

//方法一
string FloatToHex(const float &f)
{
char a[10];
sprintf(a,"%x",*(long*)&f);
string temp(a);
return temp;
}

float HexToFloat(const string &str)
{
float b;
sscanf(str.c_str(), "%x", (char *)&b);
return b;
}

//方法二
string FloatToHex_1(const float &f)
{
char buff[4];
memcpy(buff, &f, 4);
string temp(buff);
return temp;
}

float HexToFloat_1(const string &str)
{
float f;
memcpy(&f, str.c_str(), str.size());
return f;
}


void main()
{
float y = 0.111111;

//测试方法一
string str = FloatToHex(y);
cout<<str.c_str()<<endl;
cout<<HexToFloat(str)<<endl;

//测试方法二
string str1 = FloatToHex(y);
cout<<str1.c_str()<<endl;
cout<<HexToFloat(str1)<<endl;
}
wwyyxx26 2010-07-01
  • 打赏
  • 举报
回复
union
{
char byte[4];
float f;
}
jnpher 2010-07-01
  • 打赏
  • 举报
回复
单精度强制类型转换
selooloo 2010-07-01
  • 打赏
  • 举报
回复
union即可
白云飘飘飘 2010-07-01
  • 打赏
  • 举报
回复
float f=0.1111111;
char buff[4];
memcpy(buff,&f,4);
赵4老师 2010-07-01
  • 打赏
  • 举报
回复
小端存储
float 转成HEX字符串
float y=0.1111111119389534f;
char a[9];
unsigned char *p;
p=(unsigned char *)(&y);
sprintf(a,"%02X%02X%02X%02X",p[0],p[1],p[2],p[3]);

HEX字符串转float
char a[9]="398EE33D";
float y;
unsigned char *p;
p=(unsigned char *)(&y);
sscanf(a,"%2x%2x%2x%2x",p,p+1,p+2,p+3);
-------------------
大端存储
float 转成HEX字符串
float y=0.1111111119389534f;
char a[9];
unsigned char *p;
p=(unsigned char *)(&y);
sprintf(a,"%02X%02X%02X%02X",p[3],p[2],p[1],p[0]);

HEX字符串转float
char a[9]="398EE33D";
float y;
unsigned char *p;
p=(unsigned char *)(&y);
sscanf(a,"%2x%2x%2x%2x",p+3,p+2,p+1,p);

没实际运行,不敢保证100%正确
djjlove_2008 2010-07-01
  • 打赏
  • 举报
回复
使用字符串流,呵呵,这个东西你自己写段函数吧。
gz_qmc 2010-07-01
  • 打赏
  • 举报
回复
首先:0.1111111 是double型的
0.111111 才是float型的

其次:float 转成字符串
float y=0.111111;
char a[10]={0};
sprintf(a,"%x",*(long*)&y);


再次:字符号串转float
char x[10]="3DE38E39";
float b;
sscanf(x,"%x",(char *)&b);

liutengfeigo 2010-06-30
  • 打赏
  • 举报
回复
stringstream

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧