>source

Base64에서 Hex 로의 문자열 변환을 구현하려고하는데 다음과 같은 결과를 산출해야합니다. 이 웹 사이트. 예를 들어 (Base64 :bACAAAAAAAA =)는 (16 진수 :6c00800000000000).이 구현은자바 스크립트올바른 출력을 산출합니다. 그래서 나는 동등한 것을 구현하려고 노력했다.자바:

   private static String base64ToHex(String input) {
        byte[] raw = Base64.getDecoder().decode(input.getBytes());
        String result = "";
        for (int i = 0; i < raw.length; i++) {
            String hex = Integer.toString(raw[i], 16);
            result += (hex.length() == 2 ? hex : '0' + hex);
        }
        return result.toUpperCase();
    }

불행히도 이것은 필요한 출력을 제공하지 않습니다. 그래서 내가 놓친 것에 대해 힌트를 줄 수 있습니까?

  • 답변 # 1

    아래 시도-인코딩이 아니라 디코딩해야합니다. 디코딩 된 값만 고려하고 부호 부분은 무시합니다. 즉, Math.abs ()를 사용하여 절대 값 만 취합니다.

              private static String base64ToHex(String input) {
                byte[] raw = Base64.getDecoder().decode(input.getBytes());
                String result = "";
                 for (int i = 0; i < raw.length; i++) {
                      String hex = Integer.toString(Math.abs(raw[i]), 16);
                      result += (hex.length() == 2 ? hex : '0' + hex);
                  }
                return result.toUpperCase();
              }
    
    

  • 답변 # 2

        private static String base64ToHex(String input) {
             byte[] raw = Base64.getDecoder().decode(
                    input.getBytes(StandardCharsets.US_ASCII));
             StringBuilder result = new StringBuilder(raw.length * 2);
             for  (byte b : raw) {
                  result.append(String.format("%02X", b & 0xFF));
             }
             return result.toString();
         }
    
    

    문제는 자바 byte 이다서명, 따라서 마스킹 & 0xFF .

  • 이전 html - 순수 자바 스크립트를 사용하여 날짜 (2000-12-30)에 자동 슬래시를 추가하는 방법은 무엇입니까?
  • 다음 c# - 빈 문자열로 열 검색이 작동하지 않습니다