Excel公式转换为C#
林新来的C#,但试图从WPF运行这个公式。
=(BIN2DEC(RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216) + (MOD(INT(A1/65536), 256) * 65536) + (MOD(INT(A1/256), 256) * 256) + MOD(A1,256)
开始尝试和努力,但认为即时通讯不甚密切….如果任何人有任何指针…..
decimal A1 = Convert.ToInt32(textBox1.Text); A1 = (A1 / 16777216); A1 = decimal.Truncate(A1); A1 = decimal.Remainder(Left, Right); Convert.ToByte(A1); String Number = A1.ToString(); Number.Reverse(); Number.Remove(3); Number.Reverse(); A1 = Convert.ToByte(Number);
等等….
—————–更新——————————– –
对不起,如果更清楚,我试图达到这一点..
一个32位的数字应该转换成一个8或9位(27位二进制)数字。 如果生成一个9位十进制数字,则需要删除最重要的十进制数字以显示我想要的数字。
示例:467597668转换为64944484
705313524转换为34224884
4294967295转换为134217727
我现在试着这个,但得到一个不正确的数字?
int A1 = Convert.ToInt32(textBox1.Text); A1 /= 16777216; A1 &= 7; A1 *= 16777216; int A2 = (((A1 >> 16) & 255) << 16); int A3 = (((A1 >> 8) & 255) << 8); int A4 = (A1 & 255); textBox2.Text = (A1+A2+A3+A4).ToString();
由于在C#中有一个很好的整数types和位操作,所以不必像在Excel中那样跳过相同的循环。
这里是你如何转换的初始部分(BIN2DEC(RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216)
:
int A1 = Convert.ToInt32(textBox1.Text); A1 /= 16777216; // This also truncates the result; INT(A1/16777216) A1 &= 7; // This takes the last three bits of the number: BIN2DEC(RIGHT(DEC2BIN(MOD(A1,8),3)) A1 *= 16777216; // A1 * 16777216
(MOD(INT(A1/65536), 256) * 65536)
, (MOD(INT(A1/256), 256) * 256)
和MOD(A1,256)
(((A1 >> 16) & 255) << 16) (((A1 >> 8) & 255) << 8) (A1 & 255)
>>
意思是“向右移(二进制表示)”; <<
意味着“向左移(二进制表示)”。 换一个等于乘以或除以二,就像移位十进制数相当于乘以或除以十。
&
意味着按位AND
。 255是最后8位设置为1的数字; 和它一起保留原始数字的最后八位。
编辑 :这是您的重写,正确的结果返回正确的版本:
int A0 = 467597668; int A1 = A0 / 16777216; A1 &= 7; A1 *= 16777216; int A2 = (((A0 >> 16) & 255) << 16); int A3 = (((A0 >> 8) & 255) << 8); int A4 = (A0 & 255); Console.WriteLine(A1 + A2 + A3 + A4);
看起来像是基于常量和操作的一些操作。 在C#中,您应该简单地使用按位“和”( &
)“或”( |
)并移动( <<
, >>
)来执行此操作。
这应该有助于,从我所收集的,
RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216
相当于
(((a1 / 16777216) % 256) & 7) * 16777216
你应该能够使用这个派生其他3个组件。