2014-04-24 6 views
1

은 내가 아니라 여기 좀했다 ...이 같은 16 진수 값으로 "캡처 된 네트워크 패킷 '헤더"를 포함하는 텍스트 파일 ... 내가 값을 진수로 변환 할 필요가자바에서 문자를 문자열로 가져 오는 방법은 무엇입니까?

FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00. 

이 ..

InputStream input = new FileInputStream("data.txt"); 
OutputStream output = new FileOutputStream ("converteddata.txt"); 
int data = input.read(); 
while (data != -1) 
{ 
    char ch = (char) data; 
    output.write(ch); 
    data=input.read(); 
} 
input.close(); 
output.close(); 

지금, 제 문제는 ... '16 진수 문자열을'2 '문자로 가져 오는 방법입니다. (10 진수 값으로 변환하기 위해 "AD"또는 5F 등).

나는 C++에 "fgetc()"함수가 있다는 것을 알고있다.? 나는 비슷한 해결책이 필요하다. 누구든지 좋은 방법을 제안 할 수 있습니다 ..? (죄송합니다. 저는 Java 초보자이지만 C++은 훨씬 뛰어나다는 것을 알고 있습니다.) 미리 감사드립니다.

답변

0

은 샘플 코드입니다. 실시간 사용을 위해 최적화하십시오.

public static void main(String[] args) throws IOException { 
     OutputStream output = new FileOutputStream ("converteddata.txt"); 
     BufferedReader br = new BufferedReader(new FileReader(new File("data.txt"))); 
     String r = null; 
     while((r=br.readLine())!=null) { 
      String [] str = r.split("-"); 
      for (String string : str) { 
       Long l = Long.parseLong(string.trim(), 16); 
       output.write(String.valueOf(l).getBytes()); 
       output.write("\n".getBytes()); 
      } 

     } 
     br.close(); 
     output.close(); 

    } 
+0

고마워요.하지만, 하이픈 표시를 쪼개지 않고 "-"유지할 수 있습니까? 왜냐하면 내가 처형 한 후 문자열이 이렇게 생겼기 때문입니다 ... 2522001519813695116222432001992298069004182199640128617511719216813 – Maharan

+0

물론 .. \t output.write (String.valueOf (l) .getBytes()); output.write ("-". getBytes()); – Hirak

+0

오 .. 예 ... 작동 중입니다. 다시 한 번 감사드립니다. – Maharan

1

Long.parseLong("<hex string>", 16);을 시도하여 16 진수 문자열을 long 값으로 변환하십시오.

+0

왜'있는 Integer.parseInt ("hexstring", 16)'이 경우, 지정된 문자열보다 높은 255 – kai

+0

이 @kai 모두 작동 할 수 어차피,이 경우 당신이 문자열이 맞아 255보다 클 수는 없지만 더 큰 16 진수 문자열을 파싱하는 다른 사람들에게는 좀 더 일반적인 목적과 유용성을 느꼈습니다. 헤즈 업에 감사드립니다! – manan

+0

네, 선생님 ... "간단한 해결책"입니다 ... 고맙습니다! – Maharan

1

이 시도 :

여기
String strHex = "FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00"; 

String[] hexParts = strHex.split("-"); 


for (String myStr : hexParts) { 

    // System.out.println(toHex(myStr)); 
    System.out.println(toDecimal(myStr)); 
} 


// getting For Decimal values from Hex string 
public int toDecimal(String str){ 
    return Integer.parseInt(str.trim(), 16); 
} 

// getting For Hex values 
public String toHex(String arg) { 
    return String.format("%x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/))); 
} 
+0

10 진수 값에 대한 대답을 다시 편집했습니다. –

+0

또한 Working Sir ...하지만 "String strHex"를 NULL 값으로 초기화했습니다. 그 파일에서 반복적으로 발생하는 "PACKET-HEADER"였기 때문입니다. 감사..! – Maharan

+0

oK strHex의 값을 런타임에 updaet 값 이상으로 사용할 수 있습니다. –

관련 문제