C#_연속되는 16진수 숫자 붙이기(비트연산)

Today Jeeho Learned·2023년 1월 17일
0

C#

목록 보기
15/17
post-thumbnail

INTRO

Byte [] 에서 연속되는 인덱스의 값을 연결하여 하나의 16진수 숫자를 만들어야한다.
Byte[5] = 0x11 , Byte[6] = 0x12라고 가정해보자
내가 필요한 수의 값은 0x1112이다.
이 값을 구하기 위해서 고민을 했었다. String 형태로 변경하여 넣어줘야하는가를 생각했다.
고민끝에 과장님께 질문드렸더니 간단하게 말씀해주셨다.

            byte a = 0x4F;
            byte b = 0x57;

            Int16 c = Convert.ToInt16((a << 8) | b);
            Console.WriteLine(e.ToString("X2"));

답은 비트연산이었다.
a를 8비트 왼쪽으로 밀고, b와 or연산을 해주면 된다고 하셨다.
그리고 그것을 16진수로 변환하여 사용하였다.


비트연산

쉬프트 연산자 <<, >>

int a = 3; // 0000 0011
int b = a << 2; // b=12, 0000 1100
int c = a >> 1; // c=1, 0000 0001
비트 연산자는 말 그대로 비트 단위로 하는 연산이다. 쉬프트 연산자는 비트를 오른쪽(>>) 혹은 왼쪽(<<)으로 이동시키는 연산이다. 빈 자리는 0으로 채운다.
자세히보면 <<는 이동한 수만큼 2의 거듭제곱으로 곱하고 >>는 나눈다는 것을 알 수 있다.

&(AND), |(OR), ^(XOR), ~(NOT) 연산자

a = 0010 1011
b = 0110 0001
a&b = 0010 0001 // &: 모두 참(1)이면 참
a|b = 0110 1011 // |: 둘 중 하나라도 참이면 참
a^b = 0100 1010 // ^ : 서로 다르면 참
~a = 1101 0100 // ~ : 비트 반전

profile
기록해야 (살아)남는다 !

0개의 댓글