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个组件。