문자열 유형 2 진수를 비트로 변환하고 txt 파일에 쓰는 것에 대한 질문이 있습니다.자바에서 문자열 유형 2 진수를 비트로 변환
예를 들어 "0101011"과 같은 문자열이 있고 비트 유형 "0101011" 으로 변환하고 디스크의 파일에 쓰고 싶습니다.
나는 비트 문자열로 은밀한 어쨌든이 알고 싶습니다..
내가 웹에서 검색 한
덕분에 그들이 bitarray 사용하는 것이 좋습니다하지만 난 확실하지 않다
문자열 유형 2 진수를 비트로 변환하고 txt 파일에 쓰는 것에 대한 질문이 있습니다.자바에서 문자열 유형 2 진수를 비트로 변환
예를 들어 "0101011"과 같은 문자열이 있고 비트 유형 "0101011" 으로 변환하고 디스크의 파일에 쓰고 싶습니다.
나는 비트 문자열로 은밀한 어쨌든이 알고 싶습니다..
내가 웹에서 검색 한
덕분에 그들이 bitarray 사용하는 것이 좋습니다하지만 난 확실하지 않다
시도 이 :
int value = Integer.parseInt("0101011", 2); // parse base 2
그런 다음
value
의 비트 패턴은 문자열,663의 이진 해석에 해당합니다 210. 그런 다음
byte
으로 파일에
value
을 쓸 수 있습니다 (문자열은 8 진수가 8 자리 이하라고 가정).
편집Byte.parseByte("0101011", 2);
을 사용할 수도 있습니다. 그러나 Java의 바이트 값은 항상 서명됩니다. 8 번 비트 (예 : "10010110"
, 십진수 150)를 사용하여 8 비트 값을 구문 분석하려고하면 byte
에 맞지 않으므로 NumberFormatException
이됩니다. "01111111"
보다 큰 비트 패턴을 처리 할 필요가 없다면 Byte.parseByte
은 Integer.parseInt
과 마찬가지로 작동합니다.
리콜은하지만, 그 파일에 바이트를 작성, 당신은 단지 하나의 바이트를 기록에도 불구하고 int
(안 byte
) 값 — 소요 OutputStream.write(int)
를 사용합니다. int
값으로 시작하는 것이 좋습니다.
Byte.parseByte가 아닌 이유는 무엇입니까? – arshajii
@ A.R.S. - 8 비트 세트로 바이트 값을 파싱 할 수 없다는 점을 제외하면 잘 작동합니다. 게다가, 'OutputStream'에 바이트를 쓰려면'int' 인자를 취해야합니다 (바이트 만 쓰려고 할지라도). 필자는 보통 Byte.parseByte()를 사용하여 "자체 문서화"하는 측면이 있지만 처음에는 int로 시작합니다. –
숫자 오버 플로우를 피하기 위해 아래 코드를 시도 할 수 있습니다.
long avoidOverflows = Long.parseLong("11000000000000000000000000000000", 2);
int thisShouldBeANegativeNumber = (int) avoidOverflows;
System.out.println("Currect value : " + avoidOverflows + " -> " + "Int value : " + thisShouldBeANegativeNumber);
당신이
Currect value : 3221225472 -> Int value : -1073741824
문자열 유형의 이진수 "010101"을 비트 유형 –
@DcRedwing으로 변환하고 싶습니다. '비트 유형'은 무엇을 의미합니까? * byte *를 의미합니까? – arshajii
위의 대답은 큰 숫자를 오버플로없이 올바른 십진 형식으로 변환 할 때 유용합니다. –
//Converting String to Bytes
bytes[] cipherText= new String("0101011").getBytes()
//Converting bytes to Bits and Convert to String
StringBuilder sb = new StringBuilder(cipherText.length * Byte.SIZE);
for(int i = 0; i < Byte.SIZE * cipherText .length; i++)
sb.append((cipherText [i/Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1');
//Byte code of input in Stirn form
System.out.println("Bytecode="+sb.toString()); // some binary data
//Convert Byte To characters
String bin = sb.toString();
StringBuilder b = new StringBuilder();
int len = bin.length();
int i = 0;
while (i + 8 <= len) {
char c = convert(bin.substring(i, i+8));
i+=8;
b.append(c);
}
//String format of Binary data
System.out.println(b.toString());
당신이 파일의 텍스트 "0101011"을 작성 하시겠습니까, 또는 바이트 0,101,011을 쓰고 싶어 출력을 볼 수 있습니까? –
파일에 "010101"을 쓰면 문자열 유형 파일이라고 추측되므로 비트보다 많은 공간이 필요합니다. 따라서 Java 파일에서 문자열 형식의 이진수 "010101"을 얻은 다음 비트 유형으로 변환 한 다음 파일에 쓰고 싶습니다. –