繁体   English   中英

Excel公式转换为C#

[英]Excel Formula convert to 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#中具有很好的整数类型和位运算,因此不必像在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是一个数字,后八位设置为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个组件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM