?? c#代碼轉(zhuǎn)換為vc經(jīng)驗.txt
字號:
[C#代碼轉(zhuǎn)換為VC經(jīng)驗]
king_koo,2005/01/28
[概述]
本文以實現(xiàn)aes算法加解密例程為例,說一下C#代碼轉(zhuǎn)換為VC代碼經(jīng)驗。
例子代碼下載Http://otiana.com/vcangle/source/aesdemo.rar
相應(yīng)C#的例子請參考Http://www.vckbase.com/document/viewdoc/?id=1068
這個c#的類是沒有頭文件的。在vc中我們?yōu)榱耸褂梅奖阈枰獮樗麡?gòu)造一個頭文件,
把相應(yīng)的變量和函數(shù)聲明放進來即可。
[2維數(shù)組]
C#中你可以arr[a,b]這樣表示2維數(shù)組,VC可以arr[a][b],但a和b不確定時就比較
麻煩。所以和多地方我們用arr[a*b]表示2維數(shù)組,訪問時用arr[i*b+j]。如下例:
C#:
byte[,] temp = new byte[a,b];//聲明。a、b是常量
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
temp[i,j]=0;//使用
VC:
byte temp[a*b];//沒事沒必要動態(tài)分配內(nèi)存
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
temp[i*b+j]=0;//使用
[循環(huán)]
注意上例中的++i了嗎?我沒有寫錯,C#中的for循環(huán)用++i,VC用i++。
[變量的多次聲明]
C#中變量的多次聲明,如:
for(int i=0;i<10;++i){......}
for(int i=0;i<4;++i){.....}
是合法的。VC中則提示語法錯誤,要把后邊的聲明去掉:
for(int i=0;i<10;i++){......}
for(i=0;i<4;i++){.....}
[變量聲明]
C#中變量聲明很喜歡用new的,如:
byte[] result = new byte[4];
因為C#有垃圾回收機制所以一般不用你去釋放內(nèi)存,
可是在VC中就麻煩了,所以我一般改成:
byte result[4];
[函數(shù)返回]
C#中可以這樣返回
byte[] SubWord(byte[] word)
{
byte[] result = new byte[4];
......
return result;
}
在vc中卻是錯誤的的,因為result是局部變量,函數(shù)返回后指針就丟了。
我們可以在參數(shù)中返回,改成這樣:
SubWord(byte* word,byte *result)
{
......
}
[>>和+的優(yōu)先級]
C#中+的優(yōu)先級要比>>高,在VC中卻恰好相反,+的優(yōu)先級要比>>低。
所以轉(zhuǎn)換時要用括號改變運算優(yōu)先級。如C#中:
this.State[r,c] = this.Sbox[ (this.State[r,c] >> 4), (this.State[r,c] & 0x0f) ];
VC則為:
State[r][c] = Sbox[ 16*(State[r][c] >> 4)+ ( State[r][c] & 0x0f) ];
[]
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -