【问题标题】:Checksum without logic/bitwise operations没有逻辑/按位运算的校验和
【发布时间】:2015-01-08 09:21:04
【问题描述】:

我需要计算 15 个字节的 1 个字节校验和。我的第一个想法是使用像 crc8 这样的东西,但问题是我必须使用一个非常有限的 BASIC 解释器,它只支持基本的算术运算 (+-*/) 但不支持按位“xor”、“and”或“or”并且没有“移位”操作。

所以我的问题是:是否有可能在具有这些限制的情况下计算出某种合理的校验和?我认为计算总和将是一个糟糕的解决方案,但我目前想不出别的办法。

【问题讨论】:

  • 对于它的价值,我使用过的几个遗留系统在你描述的方面有限制确实使用值的简单总和的低位字节作为它们的校验和。我想这个词可能来自那个用途:)

标签: algorithm checksum crc basic integer-arithmetic


【解决方案1】:
LET a = 1
LET b = 0
FOR n = 1 to 15
   LET a = a + c(n)
   LET b = b + a
NEXT n
LET b = mod(b, 251)

然后使用b 作为校验值。与简单求和相比,它的优点是它不可交换。字节的顺序很重要。还有一串零不会给你零,检查值取决于有多少个零。

【讨论】:

    【解决方案2】:

    如果您有截断整数除法,您可以定义 mod(a, b) = a - (a/b) * b,这几乎是您对http://en.wikipedia.org/wiki/Adler-32 所需要的全部。

    【讨论】:

    • 这就是我要使用的。 :-)
    • @MarkAdler:是的,但你可能有偏见;)
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多