首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在缓冲区中查找所有字节的和

在缓冲区中查找所有字节的和
EN

Stack Overflow用户
提问于 2017-06-16 13:20:27
回答 1查看 2K关注 0票数 0

我正在做一些事情,我被要求用每一个发送的数据计算校验和。此校验和是所有字节的4字节和的下2字节

假设我有如下数据:

代码语言:javascript
复制
Bytebuffer buffer = Bytebuffer.allocate(128); // assume i have filled buffer with some data

下面是我如何找到所有字节的和,然后得到较低的2字节。

代码语言:javascript
复制
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));

但是,侦听这些数据的应用程序告诉我校验和是错误的。我的思维逻辑有什么不对?提前谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-06-16 13:27:34

不要读取缓冲区的支持array()。通常不应该直接访问该数组。它忽略缓冲区的限制和位置。相反,使用get()方法。大量获得:

代码语言:javascript
复制
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);

或个人获得:

代码语言:javascript
复制
while (buffer.hasRemaining()) {
    checksum += buffer.get() & 0xff;
}

注意,如果已经用put()调用填充了缓冲区,则需要调用flip()

在一系列通道读取或放置操作之后,调用此方法为通道写入或相对get操作序列做准备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44590312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档