方法定义:
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。为什么呀?请帮忙解答啊。:(

解决方案 »

  1.   

    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嘛
      

  2.   

    偷懒没写全,两位眼睛毒啊。
    现补全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;
        }
      

  3.   

    当 int cmdId = 9000000 的时候,又出错了。
    十六进制数应该是 40 54 89 00 嘛,现在变成了 40 54 EF BF BD 00彻底晕倒啊,…… :(
      

  4.   

    发现一个问题,只要是整型数大致超过 8020000,十六进制数就会变成6位,在ultraedit中查看,会有跳位的情况。咋回事呢??
      

  5.   

    问题已经解决:
    只要是转码,都会出现不规则的二进制异常数据。
    系统没人是iso的,把需要转车utf-8的数据先转了,然后存入字节数组中,最后在jsp中调用的时候,设置编码还是iso的(默认),直接输出即可。帮忙顶下有分哦!
    :D:D