【在线急救】在jsp页面打印byte[]数据,多了一个字节数据出来

海盗2019 2005-05-31 05:40:20
方法定义:
public byte[] toBytes()
{
ByteBuffer bb = ByteBuffer.allocate( 12 );
bb.order( ByteOrder.LITTLE_ENDIAN );
bb.putInt( 0, cmdId );
bb.putInt( 4, cmdBodyLen );
bb.putInt( 8, seqId );
....
return bb;
}

jsp中调用:
out.print( new String( pk.toBytes() ) );

其中,cmdId = 80002、cmdBodyLen = 132、seqId =2, 都是int型的。

02 35 0C 00 C2 84 00 00 00 02 00 00 00

实际数据:在 cmdId 和cmdBodyLen 中间多了一个字节的数据,十六进制 C2。

为什么呀?请帮忙解答啊。:(
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
海盗2019 2005-06-02
  • 打赏
  • 举报
回复
问题已经解决:
只要是转码,都会出现不规则的二进制异常数据。
系统没人是iso的,把需要转车utf-8的数据先转了,然后存入字节数组中,最后在jsp中调用的时候,设置编码还是iso的(默认),直接输出即可。

帮忙顶下有分哦!
:D:D
Rabbit8 2005-06-02
  • 打赏
  • 举报
回复
我顶,你把你的解决方法贴出来吧,呵呵
氘火 2005-06-02
  • 打赏
  • 举报
回复
海盗2019 2005-06-02
  • 打赏
  • 举报
回复
发现一个问题,只要是整型数大致超过 8020000,十六进制数就会变成6位,在ultraedit中查看,会有跳位的情况。

咋回事呢??
海盗2019 2005-06-01
  • 打赏
  • 举报
回复
当 int cmdId = 9000000 的时候,又出错了。
十六进制数应该是 40 54 89 00 嘛,现在变成了 40 54 EF BF BD 00

彻底晕倒啊,…… :(
海盗2019 2005-06-01
  • 打赏
  • 举报
回复
偷懒没写全,两位眼睛毒啊。
现补全toBytes(),如下:

public byte[] toBytes()
{
ByteBuffer bb = ByteBuffer.allocate( Const.LEN_HEAD_PACK );
bb.order( Const.BYTE_ORDER );
bb.putInt( 0, cmdId );
bb.putInt( 4, cmdBodyLen );
bb.putInt( 8, seqId );

byte[] b = new byte[Const.LEN_HEAD_PACK + cmdBodyLen];
System.arraycopy( bb.array(), 0, b, 0, Const.LEN_HEAD_PACK );
if ( cmdBodyLen > 0 )
{
System.arraycopy( cb.toBytes(), 0, b, Const.LEN_HEAD_PACK,
cmdBodyLen );
}
return b;
}
jFresH_MaN 2005-05-31
  • 打赏
  • 举报
回复
faint
lxleaves 2005-05-31
  • 打赏
  • 举报
回复
public byte[] toBytes()
{
ByteBuffer bb = ByteBuffer.allocate( 12 );
bb.order( ByteOrder.LITTLE_ENDIAN );
bb.putInt( 0, cmdId );
bb.putInt( 4, cmdBodyLen );
bb.putInt( 8, seqId );
....
return bb;
}
bb 不是ByteBuffer嘛
海盗2019 2005-05-31
  • 打赏
  • 举报
回复
我顶!这会好像又正常了。:*

62,615

社区成员

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

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