2010-08-08 1 views
2

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

+5

정확히 무엇이 질문입니까? 이 코드를 C++에서 C#으로 변환하려고합니까? 이것은 특히 좋은 C++ 코드가 아닙니다. C와 매우 흡사합니다. C#으로 변환하려고한다면 C#을 참고해야합니다. 이 코드에는 특별히 복잡한 것은 없습니다. –

+0

다음에 그 사실을 기억하겠습니다. 고맙습니다. – edv4ld0

답변

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

+0

이것은 좋은 C++ 코드 였으므로 좋은, 관용적 인 C# 코드는 만들 수 없습니다. –