2017-11-17 15 views
4

私はC#の中に暗号化機能のカップルを含むVB6モジュール、 翻訳を返さないI持って両側に次のaritmethic操作:算術演算VB6で同じとC#

C番号:

int inter, cfc; 
inter = 6940; 
cfc = Convert.ToInt32((((inter/256) * 256) - (inter % 256))/256); 
//cfc = 26 

VB6:すべての操作は、整数を返すされているので、私は結果の不一致を把握することができていない

Dim inter As long 
Dim cfc As long  
inter = 6940 
cfc = (((inter/256) * 256) - (inter Mod 256))/256 
'cfc = 27 

、これはcausinですg暗号化プロセスが予期せず動作する。

+0

あなたはC#コードでタイプミスがあります。あなたは 'cfd'を宣言しますが、' cfc' –

+0

ありがとう、@MattJonesを使って、できるだけ早く修正します。 –

+0

int cfc =(int)((inter/256.0)* 256.0 - (inter%256))/ 256.0) –

答えて

9

C#(inter/256)は整数除算を行いますが、VB6は整数除算を行いません。したがって、コードサンプルの1つでは、その除算の結果は残りの操作の前に27に切り捨てられ、もう1つは27.109375の値が使用されます。これは最終結果の違いにつながります。

整数の除算が意図している場合は、VB6で(inter \ 256)を使用してください。

+0

VB6コードには、実際に複製したい動作があります。私はVB6とまったく同じようにC#で操作が必要です。 –

+0

@LirioLebrónC#で256.0で除算して非整数除算を強制するか、または2つの整数変数を除算する場合には 'inter'を' double'にキャストします。 –

+1

浮動小数点除算が必要な場合。 '(inter/256)* 256'のポイントは何ですか? –