Filesystems 在简单文件系统中计算校验和

Filesystems 在简单文件系统中计算校验和,filesystems,checksum,Filesystems,Checksum,我正在开发一个用于处理SFS图像的控制台程序。有许多文件系统名SFS,具体来说,这是我正在实现的规范。但是我不明白校验和是如何计算的 我已经看了这段代码一段时间了,很明显 这是计算校验和的地方,但我不懂基本原理 ' compute checksum For wl = start + &H1AC To start + &H1BC Get ff, wl, wb wi = wi + wb Next wl wb = (256 - (wi And &HFF)) An

我正在开发一个用于处理SFS图像的控制台程序。有许多文件系统名SFS,具体来说,这是我正在实现的规范。但是我不明白校验和是如何计算的

我已经看了这段代码一段时间了,很明显 这是计算校验和的地方,但我不懂基本原理

' compute checksum
For wl = start + &H1AC To start + &H1BC
    Get ff, wl, wb
    wi = wi + wb
Next wl
wb = (256 - (wi And &HFF)) And &HFF

可以找到完整的源代码。该代码段来自“sfs.bas”文件,该方法称为“format\u sfs”

我明白了。下面是我对校验和方法的C#实现

/// <summary>
/// Calculates the checksum of the given <paramref name="superBlock"/>.
/// </summary>
/// <param name="superBlock">The super block to calculate the checksum from.</param>
/// <returns>The calculated checksum.</returns>
private static byte Checksum(SuperBlock superBlock)
{
    byte[] bytes = Structures.ToBytes(superBlock);

    int result = 0;
    for (int i = 0x1AC; i < 0x1BD; i++)
        result += bytes[i];

    return (byte)((256 - (result & 0xFF)) & 0xFF);
}
//
///计算给定值的校验和。
/// 
///用于计算校验和的超级块。
///计算出的校验和。
专用静态字节校验和(超级块超级块)
{
字节[]字节=结构。ToBytes(超级块);
int结果=0;
对于(int i=0x1AC;i<0x1BD;i++)
结果+=字节[i];
返回(字节)((256-(结果和0xFF))&0xFF);
}