16 진 코드의 문자열 표현과 비 인쇄 가능한 ASCII 교체 나는 이런 식으로 뭔가를 얻을 진수 코드 번호의 표현 : 그래서,는 .NET 내가 거기에 일부 비 인쇄 가능한 ASCII 문자와 문자열 같은 것을 가지고
"ABCD[09][05][0D][0A]"
는 가장 좋은 방법은이 뭐죠 할까? 정규식을 사용할 수 있습니까?
16 진 코드의 문자열 표현과 비 인쇄 가능한 ASCII 교체 나는 이런 식으로 뭔가를 얻을 진수 코드 번호의 표현 : 그래서,는 .NET 내가 거기에 일부 비 인쇄 가능한 ASCII 문자와 문자열 같은 것을 가지고
"ABCD[09][05][0D][0A]"
는 가장 좋은 방법은이 뭐죠 할까? 정규식을 사용할 수 있습니까?
모든 제어 문자와 일치 \p{Cc}
패턴은, 그래서
Regex.Replace(input,
@"\p{Cc}",
a=>string.Format("[{0:X2}]", (byte)a.Value[0])
);
는 제어 문자를 대체 할 것이다.
string s = "ABCD\x09\x05\r\n";
var replace =
s.Select(c => Char.IsControl(c) ? ((int)c).ToString("X2") : c.ToString())
.Aggregate(new StringBuilder(), (sb, t) => sb.Append(t))
.ToString();
죄송합니다. 편리한 컴파일러는 아닙니다.하지만이 컴파일 작업을 수행합니다.
또한이 종류의 문자열은 두 번씩 (각 문자를 16 진수 대체 또는 문자열로 투영 한 다음 다시 집계하기 위해 한 번 훑습니다.) Enumerable.Aggregate
에 대한 호출에 투영법을 일괄 적으로 적용하여이를 피할 수 있지만 이것은 더 명확하고 이것이 성능에 중요하지 않는 한 그다지 중요하지는 않습니다.
Aghh. 몇 분이면 나를 이길 수 있습니다. LINQPad를 통한 작업 확인. –
아, 고맙습니다. 불분명 한 버전을 봐야합니다. –
+1; 훌륭한 예제 코드. 이제는'Aggregate'에 대한 사용법을 찾기위한 발판을 마련했습니다. select 함수를 개인적으로 로컬 대리자로 푸시합니다. 가독성을 위해. –
Jason의 예에서 영감을 받았지만 조금 더 간단합니다. 더 나은 수행하는 확실하지 않다, 그리고 지금 당장 벤치 마크 시간이 없어,하지만 그것은 단지 한 번에 모든 것을 수행해야합니다
string s = "ABCD\x09\x05\r\n";
string replace = String.Concat(s.Select(c => Char.IsControl(c) ?
String.Format("[{0:X2}]", (int)c) :
c.ToString()));
나는 기능이 테스트했습니다.
좋은. 간단하고 따라하기 쉽다. – user380689
"ABCD [09] \ x09 \ x05 \ r \ n"로 인해 "ABCD [09] [09] [05] [0D] [0A] ". 당신은 여는 중괄호 (일반적으로 "[["를 사용하여 나의 예가 "ABCD [[09] [05] [0D] [0A]"가 될 수 있도록)를 사용하고 싶습니다. –