重新实现特定的二进制偏移对齐模式
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}");
}
除了观察到它 i * <something>
四舍五入到最接近的 4 的倍数,并使用 <something>
之外,没有什么特别的,所以这可能会在顺序上进一步偏离并且需要一些调整。
我正在用 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}");
}
除了观察到它 i * <something>
四舍五入到最接近的 4 的倍数,并使用 <something>
之外,没有什么特别的,所以这可能会在顺序上进一步偏离并且需要一些调整。