하드웨어에서 오는 16 비트 부호있는 번호가 있습니다. 나는 그것을 Int32
에 계급화하고 싶습니다.C#에서 16 비트 'short'를 32 비트 정수로 변환하려면 어떻게해야합니까?
short
으로 전송하면 음수 일 때가끔 작동합니다. 그러나 대부분의 시간은 first chance exception of type 'System.OverflowException' occurred
입니다.
int M1;
M1 = (short)(INBuffer[3] << 8) + INBuffer[2];
가 어떻게 C#에서 32 비트 정수에 16 비트의 short를 내느냐 : 여기
내 코드?
'INBuffer'의 타입은 무엇입니까? 그 선언을 우리에게 보여줄 수 있습니까? –
32 비트 값을 얻으 려한다면 왜 'short'로 변환할까요? –
다음은 추측입니다. 위 질문에 대한 귀하의 답변에 의해 반박 될 수 있습니다. 'INBuffer'가'short's를 포함하면 왼쪽 시프트는'OverflowException'을 생성 할 수 없습니다 (C#의 시프트 연산자는 결과의 끝에서 벗어난 비트를 무시하고 무시합니다). 예를 들어 32000에서 32000을 추가하려고합니다.이 경우 실제로 어떤 행동이 필요합니까? C가 할 일을하고 높은 비트를 버리고 싶다면'unchecked '를 사용할 수 있습니다. 그렇지 않다면, 그 대답은 당신이 원하는 * 것에 달려 있습니다. –