2016-09-08 3 views
0

실제로는 Java 소켓 bufferedread에서 int 값을 읽고 나중에 16 진수 표현으로 변환합니다. 아래의 방법을 사용하고 있습니다.자바에서 매우 큰 값을주는 16 진수 정수?

StringBuilder sb = new StringBuilder(); 
sb.append(Integer.toHexString(nextChar)); 

if (sb.length() < 2) { 
    sb.insert(0, '0'); //pad with leading zero if needed 
} 

String hexChar = sb.toString(); 
System.out.println("\n\n hex value is "+hexChar +" "+"Int value is:"+nextChar); 

코드가 정상적으로 작동합니다. 오직 하나 또는 두 개의 데이터를 얻었습니다. 보통 16 진수로 변환 한 후 BE 또는 A9 중 하나이지만 ffdd를 얻고 정수 값은 65533입니다. 변환 방법이 잘못되었거나 입력 값이 자체에서 가져올 수 있습니까? 그 값?

+0

죄송합니다. int nextChar = 0; ((nextChar = r.read())! = -1) – user5313398

+0

r에 대한 설정은 다음과 같습니다. r BufferedReader (new InputStreamReader (receivedSocketConn1.getInputStream())); 그것은 nextChar에 그것을 잡아 정수 원인을 반환합니까? – user5313398

+0

이것은 Java가 unsigned int를 사용하지 않는다는 사실과 관련 될 수 있습니까? 따라서 169 (0xA9)의 값을 가지며 byte 유형의 변수에 저장되는 경우 이는 169가 아니라 -87입니다. int로 승격하면 -87이됩니다. 16 진수로 변환하면 FFFFFFA9와 같은 것이됩니다. 출력물을 게시하고 어느 것이 잘못되었는지 알려주시겠습니까? – Teto

답변

1

당신이 무엇을하려고하는지 명확하게 알지 못하지만, documentation에 정의 된대로 읽음 반환 값은 다음과 같습니다. 문자는 0에서 65535 사이의 정수 (0x00-0xffff) 또는 -1 스트림의 마지막에 이르렀을 경우

물론 이것은 텍스트 판독기를 사용하고 있기 때문에 발생합니다.

this answer을 읽을 수도 있습니다.

확인, 알 수 있습니다.

당신은 당신이 바이트를 읽고,하지만 당신은 당신이 실제로 문자를 (숯 데이터 유형은 단일 16 비트 유니 코드 문자 읽기의 BufferedReader를 사용하고 있기 때문에 생각했다. 그것은 '\의 u0000의'(또는 0의 최소 값을 갖는다) 및 '\ uffff'(또는 65535 포함)의 최대 값)

나는 이것이 당신이 달성하기를 원하는 것이라고 생각합니다. 이것이 단지 샘플이 아니라는 점에 유의하십시오.

InputStream is = sock.getInputStream() 

BufferedInputStream bis = new BufferedInputStream(is); 

int nextByte; 
StringBuilder sb = new StringBuilder(); 

while((nextByte = bis.read()) != -1) { 
    sb.append(String.format("%02X ", nextByte)); 
} 
+0

내가하려고하는 것은 r = 새로운 BufferedReader (new InputStreamReader (receivedSocketConn1.getInputStream()))에서 바이트 단위로 읽습니다. 어디에서 내가이 동안 ((nextChar = r.read())! = -1). 그래서 만약 당신이 -1 스트림의 끝을 검사 구현을 참조하십시오.그래서 정수형으로 읽고 거기에 16 진수로 변환 한 후. 내가 변환 할 때 내 모든 다른 바이트는 괜찮 았어.이 특정한 것들만 나를 ffdd로주는 것은 내가 잃어버린 곳이다. – user5313398

+0

내 모든 다른 값을 잘하고 이러한 특정 바이트로만 변환이 완벽합니다 – user5313398

+0

나는 아마도 문자 세트로 무엇을 사용하는 것이 가장 좋습니다 또는 모두를 시도하는 것 같아요? – user5313398

관련 문제