请教一段二进制数据的读取问题

祁连牧士 2018-04-29 08:14:48
这是通达信2组5分钟交易数据,需用java提取数据

数据:
AB 71 7F 03 1E 85 54 42 5C 8F 54 42 CC CC 52 42
B8 1E 53 42 40 8A 55 4D E4 99 40 00 00 00 00 00
AB 71 84 03 7B 14 53 42 99 99 54 42 00 00 53 42
99 99 54 42 60 42 F2 4C 1C 9C 24 00 00 00 00 00
数据格式:
每组交易数据占32位,其中日期2位,时间2位,开盘价、最高价、最低价、收盘价、成交量、成交额各占4位,空4位。
AB 71日期,2018-04-27(已获取)
7F 03时间:14:55; 84 03是15:00(已获取)
14:55组的开盘价、最高价、最低价、收盘价、成交量、成交额分别是53.13、53.14、52.70、52.78,42337(可能没有记录)、22400
15:00组的是:52.77、53.15、52.75、53.15、23967、12700
使用readByte、readInt、readFloat得到的数据都不对,该如何读取这些数据?
...全文
853 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
祁连牧士 2018-04-29
  • 打赏
  • 举报
回复
关键是: public int bytes2int(byte[] date) { int result = 0; if (date.length == 4) { int a = (date[0] & 0xff);// 说明二 int b = (date[1] & 0xff) << 8; int c = (date[2] & 0xff) << 16; int d = (date[3] & 0xff) << 24; result = a | b | c | d; }else if(date.length == 2){ int a = (date[0] & 0xff);// 说明二 int b = (date[1] & 0xff) << 8; result = a | b; } return result; } public static float byte2float(byte[] b) { int l; l = b[0]; l &= 0xff; l |= ((long) b[1] << 8); l &= 0xffff; l |= ((long) b[2] << 16); l &= 0xffffff; l |= ((long) b[3] << 24); return Float.intBitsToFloat(l); }
祁连牧士 2018-04-29
  • 打赏
  • 举报
回复
String fileName = "D:/Develop/tdx/vipdoc/sz/fzline/sz002049.lc5"; int fieldLength = 32; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); byte[] data = new byte[2]; byte[] data4 = new byte[4]; try { // 打开一个随机访问文件流,按读写方式 RandomAccessFile in = new RandomAccessFile(fileName, "r"); // 文件长度,字节数 long fileLength = in.length(); in.seek(fileLength-fieldLength*2); System.out.println(in.getFilePointer()); in.read(data); int li1 = bytes2int(data); in.read(data); int ti1 = bytes2int(data); int year = (int)(li1/2048) + 2004; int mon = (int)((li1%2048)/100); int day = (int)((li1%2048)%100)%100; System.out.println(year+"-"+mon+"-"+day); System.out.println((int)(ti1/60)+":"+ (ti1%60)); in.read(data4); float fo = byte2float(data4); in.read(data4); float fh = byte2float(data4); in.read(data4); float fl = byte2float(data4); in.read(data4); float fc = byte2float(data4); in.read(data4); float fv = byte2float(data4); in.read(data4); int im = bytes2int(data4); System.out.println("fo:"+fo+" fh:"+fh+" fl:"+fl+" fc:"+fc+" fv:"+fv+" im:"+im); 有解了,刚弄出来
祁连牧士 2018-04-29
  • 打赏
  • 举报
回复
java处理是高位在前,而数据则是地位在前的

50,686

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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