⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c#代码转换为vc经验.txt

📁 椭圆曲线密码C实现的
💻 TXT
字号:
[C#代码转换为VC经验]
king_koo,2005/01/28

[概述]
本文以实现aes算法加解密例程为例,说一下C#代码转换为VC代码经验。
例子代码下载Http://otiana.com/vcangle/source/aesdemo.rar
相应C#的例子请参考Http://www.vckbase.com/document/viewdoc/?id=1068
这个c#的类是没有头文件的。在vc中我们为了使用方便需要为他构造一个头文件,
把相应的变量和函数声明放进来即可。

[2维数组]
C#中你可以arr[a,b]这样表示2维数组,VC可以arr[a][b],但a和b不确定时就比较
麻烦。所以和多地方我们用arr[a*b]表示2维数组,访问时用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];//没事没必要动态分配内存
for(int i=0;i<a;i++)
  for(int j=0;j<b;j++)
    temp[i*b+j]=0;//使用

[循环]
注意上例中的++i了吗?我没有写错,C#中的for循环用++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#有垃圾回收机制所以一般不用你去释放内存,
可是在VC中就麻烦了,所以我一般改成:
byte result[4];

[函数返回]
C#中可以这样返回
byte[] SubWord(byte[] word)
{
  byte[] result = new byte[4];
  ......
  return result;
}
在vc中却是错误的的,因为result是局部变量,函数返回后指针就丢了。
我们可以在参数中返回,改成这样:
SubWord(byte* word,byte *result)
{
  ......
}

[>>和+的优先级]
C#中+的优先级要比>>高,在VC中却恰好相反,+的优先级要比>>低。
所以转换时要用括号改变运算优先级。如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) ];

[]


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -