由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 问个很简单的问题?
相关主题
怎样吧byte[]变成java.security.Key?[转载] Actually let me rephrase my question
问个io的问题help! BufferedImage
how to calculate binary in java?问高手:数字签名
help about bitstream writerHow to know the size of a file in a prog
怎麼得到字符串中的raw bytes?how to multicast objects to clients in java?
How to parse the bytes[]一个socket相关的问题
Re: 如何从键盘输入获得一个float值?谢谢!How to compute round-trip time to webser
Core Java2 Notes (6)socket and simple web browser
相关话题的讨论汇总
话题: shiftby话题: endian话题: float话题: accum话题: byte
进入Java版参与讨论
1 (共1页)
c*******a
发帖数: 29
1
用java读一个binary的文件,
float是安word(2 byte??)存在文件上的,
可那个DataInputStream 里面的readFloat是要读
4个byte,
现在怎么样读一个word的binary文件,把它转成float啊?
c***r
发帖数: 4631
2

32位系统的word是4个byte吧?

【在 c*******a 的大作中提到】
: 用java读一个binary的文件,
: float是安word(2 byte??)存在文件上的,
: 可那个DataInputStream 里面的readFloat是要读
: 4个byte,
: 现在怎么样读一个word的binary文件,把它转成float啊?

c*******a
发帖数: 29
3
但是转换出来不对,
估计应该是很老的2 byte

【在 c***r 的大作中提到】
:
: 32位系统的word是4个byte吧?

c***r
发帖数: 4631
4

但是float在16位的机器上也是32位的,如果原来的文件使用了自己的编码方式恐怕要联
系原来生成文件的人了。

【在 c*******a 的大作中提到】
: 但是转换出来不对,
: 估计应该是很老的2 byte

c*******a
发帖数: 29
5
数据虽然是float,
但是manual上说这占一个word的空间,
不知道这是指几个byte?

【在 c***r 的大作中提到】
:
: 但是float在16位的机器上也是32位的,如果原来的文件使用了自己的编码方式恐怕要联
: 系原来生成文件的人了。

c***r
发帖数: 4631
6
float是有IEEE标准的,应该是32位,4 byte。
http://en.wikipedia.org/wiki/IEEE_floating-point_standard

要联

【在 c*******a 的大作中提到】
: 数据虽然是float,
: 但是manual上说这占一个word的空间,
: 不知道这是指几个byte?

c*******a
发帖数: 29
7
谢谢!
Java读写感觉还是比较麻烦啊,
不象c那样简明,
要生成好几个instance,层层嵌套才能开始读写。

【在 c***r 的大作中提到】
: float是有IEEE标准的,应该是32位,4 byte。
: http://en.wikipedia.org/wiki/IEEE_floating-point_standard
:
: 要联

e***g
发帖数: 158
8
read bytes by bytes, and reassembly the number by yourself.
don't complain - if the file is generated by java, your C code
doesn't work either.

【在 c*******a 的大作中提到】
: 用java读一个binary的文件,
: float是安word(2 byte??)存在文件上的,
: 可那个DataInputStream 里面的readFloat是要读
: 4个byte,
: 现在怎么样读一个word的binary文件,把它转成float啊?

c***r
发帖数: 4631
9
The problem maybe "endian", java use "big-endian" and C on intel CPU will use
"little endian". So the data is confusing. And you may use code below to solve
this problem
float readFloatLittleEndian( )
{
int accum = 0;
for ( int shiftBy = 0; shiftBy < 32; shiftBy+ =8 )
{
accum |= (readByte () & 0xff) << shiftBy;
} return Float.intBitsToFloat (accum);
}
I got it from http://mindprod.com/jglo

【在 c*******a 的大作中提到】
: 谢谢!
: Java读写感觉还是比较麻烦啊,
: 不象c那样简明,
: 要生成好几个instance,层层嵌套才能开始读写。

c*******a
发帖数: 29
10
非常感谢!
应该是endian的问题,用c来读是没有问题的,
java会读出异常大或者异常小的问题。
机子是linux intel xeon,是little endian的。
估计原来的人用c,所以根本没有考虑endian的问题。

【在 c***r 的大作中提到】
: The problem maybe "endian", java use "big-endian" and C on intel CPU will use
: "little endian". So the data is confusing. And you may use code below to solve
: this problem
: float readFloatLittleEndian( )
: {
: int accum = 0;
: for ( int shiftBy = 0; shiftBy < 32; shiftBy+ =8 )
: {
: accum |= (readByte () & 0xff) << shiftBy;
: } return Float.intBitsToFloat (accum);

e***g
发帖数: 158
11
that's not a fair comment on the file author.

【在 c*******a 的大作中提到】
: 非常感谢!
: 应该是endian的问题,用c来读是没有问题的,
: java会读出异常大或者异常小的问题。
: 机子是linux intel xeon,是little endian的。
: 估计原来的人用c,所以根本没有考虑endian的问题。

c*******a
发帖数: 29
12
写读程序的人用java,也没有考虑了endian
要真想移植性好,就得用ascii吧。
其实应该每个数字文件都来个头文件什么的,
一读系统就知道是big还是little了。

【在 e***g 的大作中提到】
: that's not a fair comment on the file author.
c***r
发帖数: 4631
13
so here comes xml.

【在 c*******a 的大作中提到】
: 写读程序的人用java,也没有考虑了endian
: 要真想移植性好,就得用ascii吧。
: 其实应该每个数字文件都来个头文件什么的,
: 一读系统就知道是big还是little了。

1 (共1页)
进入Java版参与讨论
相关主题
socket and simple web browser怎麼得到字符串中的raw bytes?
self-modifying code?How to parse the bytes[]
question on stream writeRe: 如何从键盘输入获得一个float值?谢谢!
Getting bytecode of a classCore Java2 Notes (6)
怎样吧byte[]变成java.security.Key?[转载] Actually let me rephrase my question
问个io的问题help! BufferedImage
how to calculate binary in java?问高手:数字签名
help about bitstream writerHow to know the size of a file in a prog
相关话题的讨论汇总
话题: shiftby话题: endian话题: float话题: accum话题: byte