0

我想知道 SQLite WAL 模式下的校验和算法我已经检查了 doc 文件,但它是这样说的(这张图片是在 sqlite doc 文件https://www.sqlite.org/fileformat2.html#section_4_1中捕获的)

WAL模式SQLite中的校验和算法

我不明白“帧头的最后 8 个字节中的校验和值与 WAL 头的前 24 个字节和前 8 个字节以及所有帧的内容连续计算的校验和完全匹配是什么意思直到并包括当前帧“

我想更清楚地了解。

谢谢。

4

1 回答 1

0

文档的下一部分说:

校验和算法

通过将输入解释为偶数个无符号 32 位整数来计算校验和:x(0)通过x(N). 如果 WAL 头的前 4 个字节中的幻数是 32 位整数是大端的,如果幻数是0x377f0683,则整数是小端的0x377f0682。无论使用哪种字节顺序来计算校验和,校验和值始终以大端格式存储在帧头中。

校验和算法仅适用于长度为 8 字节的倍数的内容。换句话说,如果输入x(0)通过,x(N)那么 N 一定是奇数。校验和算法如下:

s0 = s1 = 0
for i from 0 to n-1 step 2:
   s0 += x(i) + s1;
   s1 += x(i+1) + s0;
endfor
# result in s0 and s1

输出s0s1都是使用逆序斐波那契权重的加权校验和。(最大的斐波那契权重出现在被求和的序列的第一个元素上。)该s1值跨越序列的所有 32 位整数项,而s0忽略最后一项。

于 2016-07-04T09:10:06.643 回答