C#에서 Byte 단위로 Substring 을 하는 방법에 대해 알아보도록 합시다. 바로 본론으로 들어가겠습니다~ 😘
public string ByteSubstring(string data, int startIndex, int length)
{
// 시작 인덱스가 범위 내에 있는지 확인합니다.
if (startIndex < 0 || startIndex >= data.Length)
{
throw new ArgumentOutOfRangeException(nameof(startIndex), "시작 인덱스가 범위를 벗어났습니다.");
}
// 길이가 문자열 내 남은 바이트를 초과하지 않도록 합니다.
int remainingBytes = Encoding.Default.GetByteCount(data) - startIndex;
if (length < 0 || length > remainingBytes)
{
throw new ArgumentOutOfRangeException(nameof(length), "길이가 잘못되었거나 문자열 내 남은 바이트를 초과합니다.");
}
// 부분 문자열에 해당하는 바이트를 가져옵니다.
byte[] bytes = Encoding.Default.GetBytes(data);
// 바이트 배열을 다시 문자열로 변환합니다. 기본 인코딩을 사용합니다.
string s = Encoding.Default.GetString(bytes, startIndex, length);
return s;
}
ByteSubstring 이라고 하는 메서드를 만들어 보았습니다. 매개변수는 다음과 같습니다.
- 문자열을 자르려고 하는 대상 데이터
- 시작 위치
- 바이트 길이
시작 인덱스와 길이가 유효한 범위 내에 있는지 확인하는 입력 유효성 검사를 추가하였는데, 문제가 발생하면 추가적으로 보완하도록 하겠습니다.
Encoding.Default.GetBytes를 사용하여 추출한 문자열을 바이트로 변환합니다. 소규모 프로젝트에서 사용하기 때문에 인코딩은 '디폴트'로 진행하여도 문제가 없어서 그대로 진행합니다. 필요 시 인코딩을 설정해 주십시오~
이제, 바이트 배열을 다시 문자열로 변환할 차례입니다. Encoding.Default.GetString 을 사용하여 시작 위치부터 길이를 자르도록 합니다! 이렇게 하여 바이트 서브스트링을 해보았습니다~
다음은 확장 메서드로 변경한 참고 자료입니다. static 한정자와 this 키워드를 추가하였어요.
public static string ByteSubstring(this string data, int startIndex, int length)
{
// 시작 인덱스가 범위 내에 있는지 확인합니다.
if (startIndex < 0 || startIndex >= data.Length)
{
throw new ArgumentOutOfRangeException(nameof(startIndex), "시작 인덱스가 범위를 벗어났습니다.");
}
// 길이가 문자열 내 남은 바이트를 초과하지 않도록 합니다.
int remainingBytes = Encoding.Default.GetByteCount(data) - startIndex;
if (length < 0 || length > remainingBytes)
{
throw new ArgumentOutOfRangeException(nameof(length), "길이가 잘못되었거나 문자열 내 남은 바이트를 초과합니다.");
}
// 부분 문자열에 해당하는 바이트를 가져옵니다.
byte[] bytes = Encoding.Default.GetBytes(data);
// 바이트 배열을 다시 문자열로 변환합니다. 기본 인코딩을 사용합니다.
string s = Encoding.Default.GetString(bytes, startIndex, length);
return s;
}