VB6和C#中的算术运算不返回相同的值

Lir*_*rón 4 c# vb6 math code-conversion

我将包含几个加密函数的VB6模块翻译成c#,我在双方都有以下aritmethic操作:

C#:

int inter, cfc;
inter = 6940;
cfc = Convert.ToInt32((((inter / 256) * 256) - (inter % 256)) / 256);
//cfc = 26
Run Code Online (Sandbox Code Playgroud)

VB6:

Dim inter As long
Dim cfc As long     
inter = 6940
cfc = (((inter / 256) * 256) - (inter Mod 256)) / 256
'cfc = 27
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚结果不匹配,因为所有操作都返回整数,这导致加密过程意外地工作.

Bil*_*ard 9

在C#(inter / 256)中进行整数除法,而VB6则不进行整数除法.因此,在您的一个代码示例中,该分区的结果在其余操作之前被截断为27,而另一个使用的值为27.109375.这导致了最终结果的差异.

(inter \ 256)如果整数除法是您想要的,请在VB6中使用.

  • @Dennis_E不仅如此.如果一个人实际上决定在那里使用浮点除法,那么整个代码只是一种编写`int cfc = inter/256`(C#)的时髦方式.我看不出任何理智的理由. (2认同)