2011-09-20 4 views
-1

나는 누군가가 나를 위해 힘든 시간을 줄 것이라고 알고 있지만, 여기에갑니다. 일부 C 코드를 Java로 변환하려고 시도하고 있으며 계속 Java를 배우고 있습니다. 이 변환을 수행하고 Java를 배우는 방법을 알아내는 데 어려움을 겪고 있습니다. 어떤 도움이나 포인터를 어디로 갈지 크게 평가 될 것입니다.C to Java 변환

for(d=alldevs; d; d=d->next) 
    { 
     printf("%d. %s", ++i, d->name); 
     if (d->description) 
      printf(" (%s)\n", d->description); 
     else 
      printf(" (No description available)\n"); 
    } 

    if(i==0) 
    { 
     printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); 
     return -1; 
    } 

    printf("Enter the interface number (1-%d):",i); 
    scanf("%d", &inum); 

    if(inum < 1 || inum > i) 
    { 
     printf("\nInterface number out of range.\n"); 
     /* Free the device list */ 
     pcap_freealldevs(alldevs); 
     return -1; 
    } 

    /* Jump to the selected adapter */ 
    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); 
+5

** 특히 ** 부분에서 문제가 있습니까? 아무도 번역 된 코드를 제공하지 않습니다 ... –

+0

포인터 # 1. C를 배우십시오. 이미 포인터 # 2로 이동하십시오. 포인터 # 2. Java를 배우십시오. 이미 수행 한 경우 포인터 # 3으로 이동하십시오. 포인터 # 3. 코드 변환, Voila! – Marcelo

+0

Im을 배우면서 Java로 어려움을 겪고있는 부분. 나는 프로그래머가 아니며 완전히 독학했습니다. 나는 도움을 구하기 위해 여기에왔다. 미리 감사드립니다. – PGFDBUG

답변

1

A 변환 제공 :

public class Item { 

    private String name; 

    private String description; 

    public Item(String name, String description) { 
    this.name = name; 
    this.description = description; 
    } 

    public String getName() { 
    return this.name; 
    } 

    public String getDescription() { 
    return this.description; 
    } 

} 

(defined elsewhere) 
List<Item> items; 

이제 코드는 프로그램의 나머지 부분의 "진짜"변환을 수행해야합니다

int index = 1; 
for (Item item: items) { 
    System.out.print(index + ". " + item.getName()); 
    if (item.getDescription() != null) { 
    System.out.println(" (" + item.getDescription() + ")"); 
    } else { 
    System.out.println"((No Description Available)"); 
    } 
    index++; 
}  

List<NetworkInterface> nets = Collections.list(NetworkInterface.getNetworkInterfaces()); 
if (nets.size() == 0) { 
    System.out.println(); 
    System.out.println("No interfaces found! Make sure WinPcap is installed."); 
    return; 
} 

System.out.print("Enter the interface number(1-" + nets.size() + "):"); 
Byte[] input = new byte[100]; 
System.in.read(input); 
String inString = new String(input); 
int interfaceIndex = Integer.getInteger(inString); 

if (interfaceIndex < 1 || interfaceindex > nets.size()) { 
    System.out.println(); 
    System.out.println("Interface number out of range."); 
    // freeing items is done by dereferencing 
    nets = null; 
    return; 
} 

// jump to the selected adapter 
NetworkInterface selectedInterface = nets.get(interfaceIndex); 

참고; 즉 Java에서 PCap 솔루션을 작성하거나 PCap 라이브러리 루틴을 호출하는 JNI (Java) 인터페이스를 작성하는 것입니다.

+0

함께 일할 수있는 기회를 주셔서 감사합니다. 나는 그 일이 나를 위해 끝나기를 기대하지 않는다. 사용 가능한 모든 정보를 가지고 어디를 가야하는지에 대한 도움과 조언이 필요하다. 다시 한번 감사드립니다. – PGFDBUG

+0

@PGFDBUG, 음, 나는 일반적으로 누군가를 위해 모든 일을하지 않습니다. 그러나 문제가있는 부품은 실제로 PCap 부품이 아닙니다. Java는 목록을 다르게 처리하기 때문에 C 목록을 정확하게 시뮬레이션하는 것보다 C 목록을 Java 목록으로 변환하여 얻는 것이 더 많습니다. –

0

WinPcap에는 항상 원시 코드가 필요합니다. JNI를 사용하여 자바에 대한 일부 코드 (예 : 인터페이스 선택 부분)를 얻을 수는 있지만 완전히 변환 할 수는 없습니다. (당신은 자바에서 네이티브 dll을 직접 호출 할 수 없다)

나는 JNI에 대한 예제를 정말로 줄 수는 없지만 JNI와 Tutorial 등을 검색 할 때 찾을 수있을만큼 충분하다.

0

Java에는 포인터가 없으므로 "d-> next"와 같은 구문은 Java에서 1 : 1을 매핑하지 않습니다.

"d"가 무엇이든간에 해당하는 Java 객체를 작성하는 방법을 알아야합니다. 나머지는 간단한 반복 및 System.out 호출과 같습니다.

0

무엇을 의미합니까? 변환의 의미는 무엇입니까?
동등한 C 프로그램을 Java에 작성하려고합니까? 기존 프로젝트입니까, 아니면 C로 프로그램을 작성 했는가? 이제 동일한 프로그램을 Java로 작성 하시겠습니까?
어쨌든 자바가 객체 지향 언어 인 반면 C는 명령형/절차 적 언어 인 프로그램을 작성하는 방식이 다르므로 두 언어 모두에서 잘 이해해야합니다. 이것만으로도 프로그래밍의 '스타일'은 언어의 의미 (프로그래밍 방식, 언어에 구애받지 않는 방식, 다르게 적용됨)에 따라 다르게 변할 수 있음을 의미합니다.

추신 : 나는 당신이 정답이라면 투표를 정당화하지 않는 초보자라고 생각합니다.

+0

나는 초보자이다. 나는 C의 품위있는 이해력을 가지고 있으며 자바를 이해하려고 노력하고있다. 내가 잘 처리하지 못한 것들은 모두 그것이 전부다. – PGFDBUG

+0

문제 없음;) :) – Kounavi