重新实现特定的二进制偏移对齐模式

Reimplementing a specific binary offset alignment pattern

我正在用 C# 重新创建一个在 Visual Basic 6.0 中完成的应用程序,问题是我没有源代码,并且有一种方法 return 是一个对齐的二进制偏移量对于输入一个。

我一直在尝试使用这段代码,但没有return预期的结果。

static void Main(string[] args)
{
    for (int offset = 1; offset < 41; offset++)
    {
        int inputOffset = offset;
        if ((offset & 1) == 1) //Odd number
        {
            inputOffset = offset + 1;
        }
        int AlignedOffset = (int)(inputOffset * 2.888888888888889);
        Console.WriteLine(offset + " -> " + AlignedOffset.ToString());
    }
    Console.ReadKey();
}

这是我用原始 Visual Basic 应用程序完成的一些测试,左列是输入,右列是输出:

好像有规律可循,但我看不懂。

非常感谢!

我认为你很接近。这似乎是 2.9(不是 2.8888)的倍数四舍五入到最接近的 4 的倍数,中点总是四舍五入。

这段代码似乎产生了正确的序列:

double factor = 2.9;
for (int i = 0; i < 100; i++)
{
    int result = (int)Math.Round((i * factor) / 4.0, MidpointRounding.AwayFromZero) * 4;
    Console.WriteLine($"{i} -> {result}");  
}

SharpLab

除了观察到它 i * <something> 四舍五入到最接近的 4 的倍数,并使用 <something> 之外,没有什么特别的,所以这可能会在顺序上进一步偏离并且需要一些调整。