方法定义:
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。为什么呀?请帮忙解答啊。:(
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。为什么呀?请帮忙解答啊。:(
{
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嘛
现补全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;
}
十六进制数应该是 40 54 89 00 嘛,现在变成了 40 54 EF BF BD 00彻底晕倒啊,…… :(
只要是转码,都会出现不规则的二进制异常数据。
系统没人是iso的,把需要转车utf-8的数据先转了,然后存入字节数组中,最后在jsp中调用的时候,设置编码还是iso的(默认),直接输出即可。帮忙顶下有分哦!
:D:D