我正在计算我需要发送到服务器的数据的16位校验和,它必须重新计算并与提供的校验和进行匹配。我得到的校验和值是在int中,但我只有2个字节用于发送值。所以我将int
转换为short
,同时调用shortToBytes
方法。这工作正常,直到校验和值小于32767之后,我得到负值。java将int转换为short
事情是java没有无符号原语,所以我不能发送大于最大允许值short
的值。
我该如何做到这一点,将int转换为short并通过网络发送而不用担心截断并签名为& unsigned int。
同时在两边我有Java程序运行。
private byte[] shortToBytes(short sh) {
byte[] baValue = new byte[2];
ByteBuffer buf = ByteBuffer.wrap(baValue);
return buf.putShort(sh).array();
}
private short bytesToShort(byte[] buf, int offset) {
byte[] baValue = new byte[2];
System.arraycopy(buf, offset, baValue, 0, 2);
return ByteBuffer.wrap(baValue).getShort();
}
对不起,我忘了具体的校验和是CRC16,所以我没有任何情况下它会有价值,不能适应16位。 – changed 2010-03-21 04:31:53