2014-12-02 2 views
2

혼란스러운 제목에 대해 유감이지만 더 나은 것으로 문제를 설명하는 방법을 찾지 못했습니다.문자열에서 긴 배열 및 뒤쪽으로의 변환이 작동하지 않습니다.

문자열을 긴 벡터로 변환하는 프로그램을 작성했습니다. 정보를 되돌릴 수 있어야합니다. 긴 배열로의 변환은 나에게 잘하는 것처럼 보입니다. 베이스 64를 중간 단계로 사용하여 바이트 수를 더 멋지게 만들고 다른 처리 부분을 처리해야합니다.

public long[] str2long(String s) 
    { 
     final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8); 
     final String encoded = Base64.getEncoder().encodeToString(authBytes); 
     long[] array = new long[encoded.length()]; 
     int i=0; 
     for(char c: encoded.toCharArray()){ 
      array[i] = (long) c; 
//    System.out.print(array[i] + " "); 
      i++; 
     } 
     return array; 
    } 

문제는 실제로 그렇지도 힘든 다음 코드는 위의 코드의 정확한 역으로 나타나는지, 그리고 기본 64 다시 변환이 오류를 제공합니다 : Illegal base64 character 5b.

public String long2str(long[] array) 
{ 
    char[] chArray = new char[array.length]; 
    int i=0; 
    for(long c: array){ 
     chArray[i] = (char) c; 
     i++; 
    } 
    String s = Arrays.toString(chArray); 
    final byte[] decoded= Base64.getDecoder().decode(s); 
    try { 
     s = new String(decoded, "UTF-8"); 
     return s; 
    } catch (UnsupportedEncodingException ex) { 
     Logger.getLogger(Encryption.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return null; 
} 

그래서, 내 질문은 :

내가 놓친 거지 두 번째 방법에서 다른 무엇입니까? 나는 그것이 StandardCharsets.UTF_8일지도 모른다라고 생각한다. 그러나 나는 확실하지 않다.

어떻게하면이 기능을 long2str(long[] array)처럼 만들 수 있습니까? long2str(str2long(String s)) == String s?

원하는 경우이 코드를 확인하기 위해 사용하고있는 테스트 사례를 게시 할 수 있습니다. 당신의 long2str 방법 변경에

답변

1

:

String s = Arrays.toString(chArray); 

에 :

String s = new String(chArray); 

사용

Arrays.toString() 유효한 기본 64 문자열이 아닌 형태 [Y, W, J, j, Z, G, V, m, Z, 2, h, ...]String을 얻고있다. chArray의 모든 문자를 포함하는 String을 얻으려면 적절한 String 생성자를 사용해야합니다.