2012-11-21 3 views
1

그래, 여기에 거래가 있습니다. 바이너리 파일에서 한 번에 1 바이트 씩 읽습니다. 그리고 나서이 같은 INT 변수에 넣어 :이진 데이터를 C로 정수로 변환

l = *rbyte; 
    l <<8; 
    <read another byte> 
    l |=*rbyte; 
    l <<8; 
    <read another byte> 
    l |=*rbyte; 
    l <<8; 
    <read another byte> 
    l |=*rbyte; 

지금이 아마도 잘 작동하고, 13 반환 00 00 00 0 D 같은 이진 데이터해야하고, 6 그와 그러나 제위한 추천 이진 데이터 00 00 80 00, 단순히 128을 반환합니다. 실제로 32768을 반환해야 할 때. 무엇을 제공합니까?

+0

변경하여 시프트 라인 –

+1

... 솔루션 부호없는 int 또는 long INT를 사용해보십시오 :'L = 1 << 8'을, 당신은 단지'단지 승/결과를 저장하지 않고 계산된다 l << 8' – nhahtdh

+0

O 예! 조금도! 바로 위에! – digvijay91

답변

4

왼쪽 시프트의 결과를 아무 것도 지정하지 않기 때문에. 시프트 연산자는 ++--과 같지 않으므로 인수가 자동으로 업데이트되지 않습니다.

l = l << 8; 
+0

아니면'l << = 8;', 물론. –