2016-07-14 6 views
0

문자열로 표현 된 16 진수를 부호있는 8 비트 문자열로 변환해야합니다. 예를 들어부호있는 8 비트 코드로 0을 변환하는 자바

:이 코드 조각을 감안할 때 :

String hexideciaml = new String("50 4b e0 e7"); 
String signed8Bit = convertHexToSigned8Bit(hexideciaml); 
System.out.print(signed8Bit); 

출력이되어야합니다 : "80 75 -32 -25"

그래서 꽤 많은 부분을 구현하려면 자바로 된이 웹 사이트. https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

업데이트 : 솔루션은 다른 항아리와 JRE6이 될 필요가있다.

+2

가 왜 "50"이 unhexified 남아있을 것입니다? 결과는 "80 75 -32 -25"가 될 것입니다. – Roshan

+1

공간을 구분 기호로 사용하여'String'을 구문 분석하십시오. 그런 다음 각 값을'Integer.parseInt (String, int) '를 통해 기수가 16 인'Integer'로 변환하십시오. 이 값을 'byte'로 캐스팅하여 부호있는 값으로 변환하십시오. –

+0

당신은 @ Reimeus가 맞습니다. 질문 업데이트 중입니다. 미안합니다. – javaPlease42

답변

3

자바 1.8 (스트림)

import java.util.Arrays; 

public class HexToDec { 

    public static String convertHexToSigned8Bit(String hex) { 
     return Arrays 
       .stream(hex.split(" +")) 
       .map(s -> "" + (byte) Integer.parseInt(s, 16)) 
       .reduce((s, s2) -> s + " " + s2) 
       .get(); 
    } 


    public static void main(String[] args) { 
     String hexidecimal = "50 4b e0 e7"; 
     String signed8Bit = convertHexToSigned8Bit(hexidecimal); 
     System.out.print(signed8Bit); 
    } 

} 

자바 < 1.8

import java.util.Arrays; 

public class HexToDec { 

    public static String convertHexToSigned8Bit(String hex) { 
     String[] tokens = hex.split(" +"); 
     StringBuilder result = new StringBuilder(); 
     for (int i = 0; i < tokens.length - 1; i++) { //append all except last 
      result.append((byte) Integer.parseInt(tokens[i], 16)).append(" "); 
     } 
     if (tokens.length > 1) //if more than 1 item in array, add last one 
      result.append((byte) Integer.parseInt(tokens[tokens.length - 1], 16)); 
     return result.toString(); 
    } 


    public static void main(String[] args) { 
     String hexidecimal = "50 4b e0 e7"; 
     String signed8Bit = convertHexToSigned8Bit(hexidecimal); 
     System.out.print(signed8Bit); 
    } 

} 

출력은 다음과 같습니다 80 75 -32 -25

+0

흠은 컴파일되지 않는 것 같습니다. 이 에러가 발생했습니다.'메소드 스트림 (String [])이 배열 타입에 대해 정의되지 않았습니다. 해결책은 JRE6에 있어야합니다. 또한's2'는 어디에서 초기화됩니까? – javaPlease42

+1

Ofc JRE6 용으로 컴파일되지 않습니다. JRE8 이후에 존재하는 스트림을 사용했습니다. 잠깐, JRE6 –

+0

에 대해 다시 작성하겠습니다. @Vladislav Gutov. 고마워. 고마워. – javaPlease42