CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

四字节的数组转化为float的问题

楼主FaneAnn(十年等待)2005-07-19 15:56:42 在 Java / J2SE / 基础类 提问

从delphi编写的通讯服务器处得到4个字节的数据,该数据代表一个浮点数值,但是查看了JDK的API以后没有找到相应的方法,请大家帮帮忙!!  
                数据格式如下(标准)  
   
  D31               D30-D23 D22-D0  
  浮点数符号位 阶码 尾数  
   
   
   
  010000001 010000000 00000000000000   就是浮点数5.0的字节码表示  
   
  现在问题就是怎么从010000001 010000000 00000000000000得到float  
  问题点数:100、回复次数:17Top

1 楼Lx_KingTran_81(土豆丝炒肉)回复于 2005-07-19 16:22:10 得分 0

沙发   帮你顶Top

2 楼MOEA(MOS)回复于 2005-07-19 16:36:18 得分 50

int   maskInt   =   0xff;  
  byte   []   rec   =   new   byte[4];  
  int   a   =   ((rec[3]   <<   24)  
                                  |   ((rec[3]   &   maskInt)   <<   16)  
                                  |   ((rec[1]   &   maskInt)   <<   8)   |   (rec[0]   &   maskInt));  
  Float.intBitsToFloat(a);  
  先转成int   ,再转成float,转byte[]->int时高低位排列,要和原来int   ->byte[]时要一致,你自己试试。Top

3 楼mofeir(损人专家)回复于 2005-07-19 16:37:39 得分 0

哇,好多分数啊,我来研究一下。呵呵。有结果了就给你答案。Top

4 楼mofeir(损人专家)回复于 2005-07-19 16:38:54 得分 0

有人给答案了,那我就不做了  
  Top

5 楼laughsmile(海边的星空)回复于 2005-07-19 17:51:48 得分 0

你的D30位是1,怎么010000001001000000000000000000000   就是浮点数5.0的字节码表示Top

6 楼humanity(城市边缘的狼)回复于 2005-07-19 21:38:22 得分 0

不可以     new   DataInputStream(socket.getInputStream()).readFloat()   么?  
   
  Top

7 楼kingfish(工作很忙,很少来csdn...)回复于 2005-07-19 21:59:34 得分 0

是5.0吗,觉得像是12.0Top

8 楼FaneAnn(十年等待)回复于 2005-07-20 09:13:29 得分 0

5.0肯定没错,我在Delphi下试过的  
   
  回:humanity(总是偷窥   Java   &   XML)  
  这个方法我查看了一下JDK,在处理的时候有一定的问题  
   
  我把问题再讲清楚一点,我的socket与服务器连接,我打算用BufferedInputStream来读取数据  
  使用read(byte,int,int)方法得到byte[],在这个byte[]里包含整数信息,浮点数,和中文字符  
  整数我使用Byte的intValue()方法得到,中文字符那段byte[]我把它截取出来使用new   String(byte[],"GBK")重新编码得到,上面思路不知道如何,各位有什么更好的方法不??  
   
   
  TO:   MOEA(MOS)  
  你的方法我会试一下,先谢了  
  Top

9 楼FaneAnn(十年等待)回复于 2005-07-20 09:19:50 得分 0

实际上就是怎么从byte[0],byte[1],byte[2],byte[3]得到一个float的问题Top

10 楼kingfish(工作很忙,很少来csdn...)回复于 2005-07-20 09:31:20 得分 0

不好意思,看错位数,是5.0  
  byte转int通过楼上MOEA的方法就行了  
   
  float   f   =   Float.intBitsToFloat(0x40A00000);Top

11 楼JUSTHELP(卧式蔡鸟)回复于 2005-07-20 09:47:48 得分 0

请教一下!  
  &   0xff有什么用,和全1与运算,不是不变吗?  
  是不是为了保证是8位。Top

12 楼FaneAnn(十年等待)回复于 2005-07-20 09:59:00 得分 0

 
  public   class   FloatTest  
  {  
  public   static   void   main(String[]   args)  
  {  
  int   maskInt   =   0xff;  
  byte   []   rec   =   new   byte[4];  
   
  /*用01000000101000000000000000000000也就是5.0来测试*/  
  rec[3]   =   (new   Byte("40")).byteValue();  
  rec[2]   =   (new   Byte("A0")).byteValue();  
  rec[1]   =   (new   Byte("00")).byteValue();  
  rec[0]   =   (new   Byte("00")).byteValue();  
   
  int   a   =   ((rec[3]   <<   24)  
                                  |   ((rec[3]   &   maskInt)   <<   16)  
                                  |   ((rec[1]   &   maskInt)   <<   8)   |   (rec[0]   &   maskInt));  
   
  float   myFloat   =   Float.intBitsToFloat(a);  
   
  System.out.println(Float.toString(myFloat));  
  }  
  }  
   
  这里的new   Byte(string)     的string不知道该怎么写(格式,要求),请过路的就以上面的5.0做例子讲解一下,多谢Top

13 楼FaneAnn(十年等待)回复于 2005-07-20 09:59:49 得分 0

Exception   in   thread   "main"   java.lang.NumberFormatException:   For   input   string:   "A  
  0"  
                  at   java.lang.NumberFormatException.forInputString(NumberFormatException.  
  java:48)  
                  at   java.lang.Integer.parseInt(Integer.java:468)  
                  at   java.lang.Byte.parseByte(Byte.java:122)  
                  at   java.lang.Byte.<init>(Byte.java:296)  
                  at   person.fane.test.FloatTest.main(FloatTest.java:19)  
   
  出错信息!!!!!!!!!!!!!!!!!!!!!!Top

14 楼kingfish(工作很忙,很少来csdn...)回复于 2005-07-20 10:09:18 得分 50

byte[]   b   =   new   byte[4];  
          b[0]   =   0x40;  
          b[1]   =   (byte)0xA0;  
          b[2]   =   0;  
          b[3]   =   0;  
   
          float   f   =   Float.intBitsToFloat((b[0]<<24)&0xFF000000|(b[1]<<16)&0xFF0000|(b[2]<<8)&0xFF00|b[3]);Top

15 楼FaneAnn(十年等待)回复于 2005-07-20 10:32:28 得分 0

不明白啊??  
   
  int   a   =   (rec[3]<<24)&0xFF00|(rec[3]<<16)&0xFF00|(rec[1]<<8)&0xFF00|rec[0];  
  System.out.println(a);  
   
  float   f   =   Float.intBitsToFloat((rec[3]<<24)&0xFF000000|(rec[2]<<16)&0xFF0000|(rec[1]<<8)&0xFF00|rec[0]);  
   
  float   myFloat   =   Float.intBitsToFloat(a);  
   
  System.out.println(Float.toString(myFloat));  
  System.out.println(Float.toString(f));  
   
  输出:  
  0  
  0.0  
  5.0  
  int   a的值丢失了??WHY??????Top

16 楼FaneAnn(十年等待)回复于 2005-07-20 10:49:09 得分 0

不好意思,写错了,结贴  
  kingfish(八百里秦川@龙城异客)  
  TO:   MOEA(MOS)  
  都是对的  
  MOEA(MOS)要改成  
  int   a   =   ((rec[3]   <<   24)  
                                  |   ((rec[2]   &   maskInt)   <<   16)  
                                  |   ((rec[1]   &   maskInt)   <<   8)   |   (rec[0]   &   maskInt));Top

17 楼FaneAnn(十年等待)回复于 2005-07-20 10:53:57 得分 0

我给了分数了阿,怎么看不到Top

相关问题

  • 要把卡号转化为 字节数组么 如何转?
  • 如何 将 字节数组转化成字符串
  • 关于byte[] b 字节数组 转化为十进制的问题
  • 字节数组问题
  • 字节数组的合并?
  • 一道华为公司的面试题目.怎么把字符串转化为字节数组?
  • 一道华为公司的面试题目.怎么把字符串转化为字节数组?
  • 求助字节数组问题。急!
  • 菜鸟问题,关于字节数组?
  • 如何将字节数组清空?

关键词

  • 数据
  • floattest
  • bytevalue
  • rec
  • byte
  • float
  • 浮点数
  • 方法
  • 问题
  • 得到

得分解答快速导航

  • 帖主:FaneAnn
  • MOEA
  • kingfish

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo