/// <summary>
/// 16진수 문자열을 byte array로 변환
/// </summary>
/// <param name="HexString"></param>
/// <returns></returns>
public byte[] HexStringToByteArray(string HexString)
{
// 0x, 0X를 제거
if (HexString.StartsWith("0x") || HexString.StartsWith("0X")) HexString = HexString.Substring(2);
// hex character가 아닌 문자가 포함되어 있으면 해당 character를 제거
HexString = new string(HexString.Where(c => Uri.IsHexDigit(c)).ToArray());
// hex string을 byte array로 변환하기
string hexString = HexString.Replace(" ", ""); // 공백 제거
if (hexString.Length % 2 != 0)
{
hexString = "0" + hexString; // hex string의 길이가 홀수이면 앞에 0을 추가
// return null;
}
byte[] bytes = new byte[hexString.Length / 2]; // byte array의 크기는 hex string의 길이의 절반
for (int i = 0; i < hexString.Length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16); // 16진수 문자열을 byte로 변환
}
return bytes;
}
/// <summary>
/// 2진수 문자열을 byte array로 변환
/// </summary>
/// <param name="BinaryString"></param>
/// <returns></returns>
public byte[] BinaryStringToByteArray(string BinaryString)
{
// 0b, 0B를 제거
if (BinaryString.StartsWith("0b") || BinaryString.StartsWith("0B")) BinaryString = BinaryString.Substring(2);
// binary character가 아닌 문자가 포함되어 있으면 해당 character를 제거
BinaryString = new string(BinaryString.Where(c => c == '0' || c == '1').ToArray());
// binary string을 byte array로 변환하기
string binaryString = BinaryString.Replace(" ", ""); // 공백 제거
if (binaryString.Length % 8 != 0)
{
//binary string의 길이가 8의 배수가 아니면 8의 배수가되게 0을 추가
binaryString = binaryString.PadLeft(binaryString.Length + (8 - binaryString.Length % 8), '0');
}
byte[] bytes = new byte[binaryString.Length / 8]; // byte array의 크기는 binary string의 길이의 8분의 1
for (int i = 0; i < binaryString.Length; i += 8)
{
bytes[i / 8] = Convert.ToByte(binaryString.Substring(i, 8), 2); // 2진수 문자열을 byte로 변환
}
return bytes;
}
/// <summary>
/// 2진수(0b01), Decimal, 16진수(0x01) 문자열을 int형으로 변환
/// </summary>
/// <param name="NumberString"></param>
/// <returns></returns>
public int StringToInt32(string NumberString)
{
if (NumberString == null) return 0;
int result = 0;
if (NumberString.StartsWith("0b") || NumberString.StartsWith("0B"))
{
byte[] bytes = BinaryStringToByteArray(NumberString); // 2진수 문자열을 byte array로 변환
Array.Reverse(bytes); // byte array를 reverse
if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
}
else if (NumberString.StartsWith("0x") || NumberString.StartsWith("0X"))
{
byte[] bytes = HexStringToByteArray(NumberString); // 16진수 문자열을 byte array로 변환
Array.Reverse(bytes); // byte array를 reverse
if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
}
else
{
//숫자를 제외한 문자열 삭제
NumberString = new string(NumberString.Where(c => char.IsDigit(c) || c == '-').ToArray());
//하위 10개 문자열만 제외하고 삭제
if (NumberString.Length > 11) NumberString = NumberString.Substring(NumberString.Length - 11, 11);
//int형을 벗어나는 값이면 최대값 또는 최소값으로 설정
Int64 tmpNum = Convert.ToInt64(NumberString);
if (tmpNum > int.MaxValue) result = int.MaxValue;
else if (tmpNum < int.MinValue) result = int.MinValue;
else result = Convert.ToInt32(NumberString);
}
return result;
}
'Programming > C#' 카테고리의 다른 글
텍스트 박스에 HEX만 입력 필터링 (0) | 2020.12.04 |
---|