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 |