我正在做一些事情,我被要求用每一个发送的数据计算校验和。此校验和是所有字节的4字节和的下2字节
假设我有如下数据:
Bytebuffer buffer = Bytebuffer.allocate(128); // assume i have filled buffer with some data下面是我如何找到所有字节的和,然后得到较低的2字节。
byte array = buffer.array();
int checksum = 0;
for(byte b : array){
checksum += (int)b
}
checksum = (checksum & 0xff00ff) + ((checksum >> 0x08) & 0xff00ff);
short result = (short) (checksum + (checksum >> 0x10));但是,侦听这些数据的应用程序告诉我校验和是错误的。我的思维逻辑有什么不对?提前谢谢
发布于 2017-06-16 13:27:34
不要读取缓冲区的支持array()。通常不应该直接访问该数组。它忽略缓冲区的限制和位置。相反,使用get()方法。大量获得:
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);或个人获得:
while (buffer.hasRemaining()) {
checksum += buffer.get() & 0xff;
}注意,如果已经用put()调用填充了缓冲区,则需要调用flip()。
在一系列通道读取或放置操作之后,调用此方法为通道写入或相对get操作序列做准备。
https://stackoverflow.com/questions/44590312
复制相似问题