以 256 为模数递增 1

问题描述

我正在尝试发送数据包。我已经建立了可靠的通信。我从客户端收到了一个 0x00 的序列号。我被告知将该序列号增加一个模 256 并将其发送到我的下一个串行 API 标头中。我很困惑他们所说的增加一个模 256 是什么意思。

解决方法

为了简单地恢复,每次都必须发送 API 标头:

  1. 增加接收到的序列号。
  2. 如果序列号是 256,则将其重置为 0。
  3. 将结果序列号与您的下一个串行 API 标头一起发送。

解释增量1模256的确切含义:

这意味着预期的序列号应该是 ( received sequence number from the client + 1 ) modulo 256。如果你考虑数学,这意味着你的结果序列号应该始终是 0 到 255 之间的值作为模 256任何整数只能是(对于 -128 和 +127 之间的有符号整数,模运算将给出相同的二进制结果,无论您认为是有符号还是无符号整数)。所以每次序列达到256时,都是从0重新开始:

客户端序列号 你发送
0 1
1 2
.. ..
254 255
255 0
0 1
.. ..

正如你所说:

我收到一个序列号 0x00

这意味着接收到的序列号是一个字节,因此它只能是 0 到 255 之间的正整数(或 -128 到 +127 之间的有符号整数,但模运算将给出相同的二进制结果,无论您考虑有符号或无符号整数)。如果接收到的序列号不仅仅是一个字节,那么它可以是所提供格式范围内的任何整数。在这种情况下,您仍然必须应用所需的公式。带有字型客户端序列号的示例:

客户端序列号 你发送
0 1
1 2
.. ..
255 0
256 1
257 2
.. ..
510 255
511 0
512 1
.. ..
4336 241
.. ..

我被告知将该序列号增加一个模 256

表示增加一并应用模 256 对结果 以获得您的序列号。