2010-08-08 21 views
2

C++:函數C++到C#(安全碼)

static void doIp(byte data[]) 
{ 
    unsigned char j, k; 
    byte val; 
    byte buf[8]; 
    byte *p; 
    byte i = 8; 

    for(i=0; i<8; i++) 
    { 
    val = data[i]; 
    p = &buf[3]; 
    j = 4; 

    do 
    { 
     for(k=0; k<=4; k+=4) 
     { 
     p[k] >>= 1; 
     if(val & 1) p[k] |= 0x80; 
     val >>= 1; 
     } 
     p--; 
    } while(--j); 
    } 

    memcpy(data, buf, 8); 
} 

C#: ?

+0

代碼是做什麼的? – dtb 2010-08-08 18:50:59

+5

問題到底是什麼?您是否試圖將此代碼從C++轉換爲C#?這並不是特別好的C++代碼:它看起來像C很糟糕。如果您試圖將它轉換爲C#,您應該查閱C#書籍。這段代碼沒有特別複雜的內容。 – 2010-08-08 18:51:49

+0

我會記得下一次。謝謝。 – edv4ld0 2010-08-08 19:03:52

回答

5
class someclass { 
    public static void doIp(byte[] data) 
    { 
     uint j, k; // these are just counters, so uint is fine 
     byte val; 
     byte[] buf = new byte[8]; // syntax changed here 
     byte p;     // you end up using p simply as an offset from buf 
     byte i = 8; 

     for(i=0; i<8; i++) 
     { 
      val = data[i]; 
      p = 3; 
      j = 4; 

      do 
      { 
       for(k=0; k<=4; k+=4) 
       { 
        buf[p+k] >>= 1; 
        if((val & 1) != 0) buf[p+k] |= 0x80; // must test against 0 explicitly in C# 
        val >>= 1; 
       } 
       p--; 
      } while(--j != 0); // must test against 0 explicitly in C# 
     } 

     Array.Copy(buf, data, 8); 
    } 
} 
+0

很多很多,謝謝。 – edv4ld0 2010-08-08 19:04:22

+0

這是很好的C++代碼,所以它不適合用於好的慣用C#代碼。 – 2010-08-08 21:17:02