java中怎样按照big endian输出

chenweionline 2005-01-20 06:00:42
程序:
FileOutputStream fos = new FileOutputStream("d:\\test2");
DataOutputStream dos = new DataOutputStream(fos);

dos.writeFloat( 5.3f );

fos.close();

java中默认是按照 little endian 输出:
40 A9 99 9A

怎样修改编码方式使其按照 big endian 输出为:
9A 99 A9 40
...全文
427 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjsfr 2005-01-20
  • 打赏
  • 举报
回复
但是在jdk1.4种加入了
java.nio.ByteOrder
你可以查一下是不是有直接进行Big-endian和Little-endian间转换的方法
wjsfr 2005-01-20
  • 打赏
  • 举报
回复
对,java本身是Big endian的
c++才是little endian
要转换成Little endian的话,可以这么来做
public void writeInt(int i)throws IOException{
byte[] b=new byte[4];

int maskB1 = 0xff;
int maskB2 = 0xff00;
int maskB3 = 0xff0000;
int maskB4 = 0xff000000;

b[3] =(byte)((i & maskB4)>>>24);
b[2] =(byte)((i & maskB3)>>>16);
b[1] =(byte)((i & maskB2)>>>8);
b[0] =(byte)(i & maskB1);
}

这是一个int的转型
chenweionline 2005-01-20
  • 打赏
  • 举报
回复
说反了,java 是 big endian ,c++ 是 little endian 。
chenweionline 2005-01-20
  • 打赏
  • 举报
回复
我用java生成的是一个媒体格式的文件,float只是文件中的某参数,最后该文件是由VC++写的播放器播放的。
jFresH_MaN 2005-01-20
  • 打赏
  • 举报
回复
我觉得很奇怪,楼主为什么要这样写入文件。
你把这个float当字符串写进文件不就行了嘛?C++那边当字符串读
这样就没有编码问题了!
chenweionline 2005-01-20
  • 打赏
  • 举报
回复
因为我输出的数据文件最终是被 VC++ 写的程序读取,而 VC++ 默认 big endian,所以我希望用java生成二进制数据文件的时候就按照 big endian,这样 VC++ 读取的时候就不用再将 little endian 转换成 big endian 。
treeroot 2005-01-20
  • 打赏
  • 举报
回复
为什么要这样

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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