본문 바로가기
프로그래밍

[C#] ushort를 상위 바이트와 하위 바이트로 추출하기

by minimax95 2020. 12. 22.

이번 포스팅에서는 네트워크 통신 프로토콜에서 ushort를 상위 Byte와 하위 Byte로 나누어 값을 송수신할 경우 사용하는 방법에 대해 정리해 보도록 하겠습니다.

 

아래의 이미지는 LG Chem에서 생산한 Battery의 프로토콜 예시 입니다.

Modbus address 40068 번지를 보면 uint16 Type으로 하나의 Value에서 상위 Byte와 하위 Byte로 나누어 Max Module Number와 Min Module Number의 값을 참조할 수 있도록 명기하고 있습니다.

 

따라서 우리는 Modbus에서 받은 uint16을 Byte 배열로 나누어서 상위 Byte와 하위 Byte를 추출해 Data를 사용해야 합니다. 이러한 경우에는 가장 손쉽게 BitConverter 클래스를 사용하는 방법이 있습니다.

 

그럼 BitConverter를 이용해서 프로토콜에서 요구하는 상위 Byte와 하위 Byte를 추출하여 사용하는 함수를 만들어 보도록 하겠습니다.

public byte [] ConvertToByte(ushort value)

{

    return BitConverter.GetBytes(value);

}

상당히 심플하고 간단한 함수라 할 수 있습니다.

여기서 반환하는 Byte 배열에서 byte [0]에 있는 값이 상위 Byte Value가 되고 byte [1]에 있는 값이 하위 Byte Value로 사용됩니다. 즉 Max Module Number가 byte[0], Min Module Number가 byte[1] 값으로 할당됩니다.

 

실제 프로토콜에서 제시하고 있는 예제 값 0x0A10은 16진수로 이 값을 ConvertToByte(value) 함수에 넣어주면 결괏값으로 byte [0] => 16, byte [1] => 10의 값이 나오는 것을 확인할 수 있습니다.

 

아래 이미지는 테스트를 위해 콘솔 프로젝트를 하나 열어서 결괏값을 확인한 이미지입니다.

실행 결과 ☞

이상으로 네트워크 통신 프로토콜에서 ushort를 상위 Byte와 하위 Byte로 나누어 값을 송수신할 경우 사용하는 방법에 대해서 알아보았습니다.

감사합니다.

댓글