본문 바로가기

프로그래밍/C#

C# 비트 연산

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;



namespace bitByte

{

class Program

{

static void PrintBits(BitArray ba)

{

for (int i = 0; i < ba.Count; i++)

{

Console.Write(ba[i] ? "1" : "0");

}

Console.WriteLine();

}



static void Main(string[] args)

{

// (// (1) 한 byte 를 Hex 문자로 변환하는 방법법

byte bbb1 = 0xFE;

string hex1 = bbb1.ToString("X2");

Console.WriteLine("0xFE => {0}", hex1);



// (2) byte[] 을 Hex 문자열로 변환하는 방법법

byte[] bytes = new byte[] { 0xA1, 0xB2, 0xC3, 0x11, 0x2F };

string h = string.Concat(Array.ConvertAll(bytes, byt => byt.ToString("X2")));

// 혹은은

// h = BitConverter.ToString(bytes).Replace(""--", "");;

Console.WriteLine("0xA1, 0xB2, 0xC3, 0x11, 0x2F => {0}", h);



// (3) 한 Hex 문자를 byte 로 변환하는 방법법

byte bbb2 = Convert.ToByte("3F", 16);

// 혹은은

// b2 = byte.Parse("3F", NumberStyles.HexNumber);;

Console.WriteLine("16진수 3F를 10진수로 => {0}", bbb2);



// (4) 여러 Hex 문자열을 byte[] 로 변환하는 방법법

string hexString = "A1B2C3";

byte[] xbytes = new byte[hexString.Length / 2];

for (int i = 0; i < xbytes.Length; i++)

{

xbytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);

Console.Write("{0}({1}) ", xbytes[i], xbytes[i].ToString("X2"));

}

Console.WriteLine(" ");



// (// (1) bytee를 비트문자열로 변환환

byte a = 0x11;

string s = Convert.ToString(a, 2).PadLeft(8, '0'); // 00010001

Console.WriteLine("0x11 -> {0}", s);



// (2) int를 비트문자열로 변환환

int j = 0x01020304;

s = Convert.ToString(j, 2).PadLeft(32, '0');

Console.WriteLine("0x01020304 -> {0}", s);



// (3) 비트 문자열을 1 바이트로 변환

string bitStr = "01110000";

byte b = Convert.ToByte(bitStr, 2); // 112 = 0x70

Console.WriteLine("01110000 -> {0}", b);



// (4) 비트 문자열을 int 로 변환환

string bstr = "00000001000000100000001100000100";

int nnn = Convert.ToInt32(bstr, 2); // 16909060 = 0x01020304

Console.WriteLine("{0} -> {1}", bstr, nnn);



byte x = 0xF1;

byte y = 0x1F;



byte aa = (byte)(x & y); // 0x11

byte o = (byte)(x | y); // 0xFF

byte c = (byte)(x ^ y); // 0xEE

byte d = (byte)~x; // 0x0E



byte e = (byte)(x << 2); // 0xC4

byte f = (byte)(y >> 2); // 0x07

Console.WriteLine("{0} {1} {2} {3} {4} {5}", aa, o, c, d, e, f);

Console.WriteLine("0x{0} 0x{1} 0x{2} 0x{3} 0x{4} 0x{5}", Convert.ToString(aa, 16).ToUpper(), Convert.ToString(o, 16).ToUpper(), Convert.ToString(c, 16), Convert.ToString(d, 16), Convert.ToString(e, 16), Convert.ToString(f, 16));



///////////////////////////////////////////////////////////////////////////////

// 8개의 비트를 갖는 BitArray 객체 생성성

BitArray ba1 = new BitArray(8);



// ## 비트 쓰기 ###

ba1.Set(0, true);

ba1.Set(1, true);



PrintBits(ba1); // 11000000



BitArray ba2 = new BitArray(8);

ba2[1] = true;

ba2[2] = true;

ba2[3] = true;

PrintBits(ba2); // 01110000



// ## 비트 읽기 ###

bool b1 = ba1.Get(0); // true

bool b2 = ba2[4]; // false



// ## BitArray 비트 연산 ##

// OR (ba1 | ba2) 결과를 ba1 에

ba1.Or(ba2);

PrintBits(ba1); // 11110000



// AND (ba1 & ba2) 결과를 ba1 에

ba1.And(ba2);

PrintBits(ba1); // 01110000



ba1.Xor(ba2);

ba1.Not();



// ## 기타 BitArray 생성 방법 ###

// bool[] 로 생성성

var bools = new bool[] { true, true, false, false };

BitArray ba3 = new BitArray(bools);



// byte[] 로 생성성

var bbbytes = new byte[] { 0xFF, 0x11 };

BitArray ba4 = new BitArray(bbbytes);

}

}

}

반응형

'프로그래밍 > C#' 카테고리의 다른 글

C# lock  (0) 2019.03.24
C# 명령줄 인수  (0) 2019.03.24
C# 소켓 클라이언트 socket client  (0) 2019.03.24
C# 소켓 서버 socket server  (0) 2019.03.24
C# 스레드 thread  (0) 2019.03.24