一个float型数字的问题,请高手指点,非常感谢。

genliter 2003-04-26 03:00:35
大家知道,c中float在内存中以32为二进制存放,第一位是sign,接下来的八位是指数位,后23位是小数位,小弟要问的是,如何将这32位每八位每八位当成一个字符取出?
...全文
40 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
genliter 2003-04-28
  • 打赏
  • 举报
回复
非常,感谢,我要给分了。
谢谢帮忙。分太少。
短歌如风 2003-04-27
  • 打赏
  • 举报
回复
关于看什么书最合适,不同的人有不同的观点。我觉得下面几本书还可以:
《C++语言和面向对象的程序设计》、《C++思想》、《Effective C++》
genliter 2003-04-26
  • 打赏
  • 举报
回复
非常感谢你plainsong,我对c++以及c++builder非常的感兴趣,非常想更深入学习,通过我的问题的臭水平以及您的编程经验,您看我现在应该看一些什么样的书?
谢谢
短歌如风 2003-04-26
  • 打赏
  • 举报
回复
这是因为从signed char类型到signed int类型转换时发生了符号扩展。这样解决:
AnsiString a;
a=IntToHex((unsigned char)Temp.Buf[i]);
其实你可以一次把整个浮点数转化为16进制字符串:
#include <classes.hpp>
AnsiString a;
float fval;
a.SetLength(8);
BinToHex(reinterpret_cast<char*>(&fval), a.c_str(), 4);
drivers 2003-04-26
  • 打赏
  • 举报
回复
gz
genliter 2003-04-26
  • 打赏
  • 举报
回复
例如,把1.001的四个字节一次取出来,从第32位到0位每字节表示成一个十六进制,依次是
3F 80 20 C5 ,我对每个字节是这样转化的,
AnsiString a;
a=IntToHex(Temp.Buf[i]);
结果i=1,3时,正确显示20,3F,但是i=0,2时,显示了FFFFFFC5,FFFFFF80。
请问怎么回事。
谢谢
genliter 2003-04-26
  • 打赏
  • 举报
回复
我想把这四个char字符,化成对应的十六进制字串,直接用了函数IntToHex,结果第一第三个字符转化正确,剩下的两个出现了多余的fff……
qibo999 2003-04-26
  • 打赏
  • 举报
回复
真不错, plainsong(伤心的风) 反应好快啊,我还没写完,他都已经写出3种了,呵呵
短歌如风 2003-04-26
  • 打赏
  • 举报
回复
方法3:
float fval;
char buf[4];
memmove(buf, &fval, 4);
...
就写这三种吧,其实方法多的是,你可以自己开动脑筋去想。
短歌如风 2003-04-26
  • 打赏
  • 举报
回复
方法2:
float fval;
char* buf;
fval = 3.14;
buf = (char*)(&fval);//如果是在C++中则最好用buf = reinterpret_cast<char*>(&fval);
然后访问buf[0],buf[1],buf[2],buf[3]
短歌如风 2003-04-26
  • 打赏
  • 举报
回复
type union
{
float fval;
char buf[4];
} Float2Char4;

Float2Char4 Temp;
Temp.fval = 3.14;
然后访问Temo.buf;

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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