2017-11-17 10 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은 그렇지 않습니다. 따라서 코드 샘플 중 하나에서 나머지 부분은 27로 절단되고 다른 부분은 27.109375의 값이 사용됩니다. 이것은 최종 결과의 차이로 연결됩니다.

VB6에서 정수 나누기를 사용하는 경우 (inter \ 256)을 사용하십시오.

+0

VB6 코드에는 실제로 복제하려는 동작이 있습니다. C#에서 VB6과 같은 결과를 얻으려면 작업이 필요합니다. –

+0

@ LirioLebrón C#에서 256.0으로 나눗셈을하여 비 정수 나누기를 강요하거나, 두 개의 정수 변수를 나누는 경우'inter'를'double'으로 캐스트 할 수 있습니다. –

+1

부동 소수점 나누기가 필요한 경우. '(inter/256) * 256'의 포인트는 무엇입니까? –