2015-01-11 6 views
-1

다음 과제가 있습니다. String 객체의 문자를 바이트 배열에 쓰는 코드를 만들어야합니다.문자열을 바이트 배열로 변환하는 방법을 모르겠습니다.

먼저 String에 대해 사용자에게 물어봐야합니다. 그런 다음 te 바이트 배열을 만들어야합니다.이 배열의 첫 번째 위치에는 카운터가 있어야합니다.

배열에는 String의 각 문자의 ASCII 코드가 들어 있으며 카운터에는 String의 길이가 포함되어 있으므로 String.getBytes() 메서드를 사용해야합니다.

import java.util.Scanner; 
public class ByteArray { 

    public static void main(String[] args) 
    { 
     int l; 
     String string; 
     Scanner read = new Scanner(System.in); 
     System.out.print("String: "); 
     string= read.nextLine(); 
     l = string.length()+1; 
     byte arrayBytes[] = new byte[l]; 
     arrayBytes = string.getBytes(); 
     arrayBytes[0] = l; 
    } 
} 

문제는 내가 ByteArray의 문자열을 변환 할 올바르게 getBytes() 메소드를 사용하고 있는지 알고하지는과 동시에 첫 번째 위치에의 문자 수를 넣어 것입니다 배열

+5

javadoc을 읽었습니까? –

+0

실제 문제는 다음과 같습니다. 여러 자리 숫자를 입력하면 인덱스 0에 관심이있는 숫자는 표시되지 않습니다. 그렇지 않으면 접근 방식이 괜찮습니다 (불필요한 변수'l'을 선언하면 그냥 사라질 수 있습니다). IMO). – Makoto

+0

길을 따라 어딘가에'System.arraycopy'가 필요하다고 생각합니다. –

답변

1

문제는 내가 ByteArray의 문자열을 변환 할 올바르게 getBytes() 메소드를 사용하고 있는지 알고하지는과 동시에 첫 번째 위치의 문자 수를 넣어 것입니다 의 배열

아니야.

String.getBytes()에 대한 javadoc을 읽으면 바이트 인코딩 된 표현으로 된 문자열을 포함하는 새로 할당 된 바이트 배열을 반환한다고 알립니다. encode 된 String의 최초의 바이트는 배열의 오프셋 (offset) 제로가됩니다. 그건 당신이 (궁극적 인) 결과에 필요한 것이 아닙니다.

또한, 작성한 것은 1 바이트 배열을 작성한 다음 폐기하는 것입니다.

이 문제는 올바른 크기의 두 번째 배열을 할당 한 다음 올바른 위치의 첫 번째 배열에서 두 번째 배열까지 바이트를 전송해야합니다. 적어도 두 가지 방법이 있습니다. (힌트 : 하나는 루프를 코딩하는 것을 포함합니다.)

당신이 놓친 또 다른 세부 사항이 있습니다. 이 문제는 특별히 ASCII 코드를 배열에 넣어야하지만 getBytes()가 문자를 반드시 ASCII로 인코딩하지는 않습니다. (javadocs를 다시보십시오. 대답은 거기에 있습니다.)

관련 문제