바이트 배열의 문자열이 C#에서 트림되지 않습니까?
문제
이와 비슷한 바이트 배열 (16 바이트)이 있습니다.
71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00
이것을 사용하여 문자열로 변환하고 엔딩 공간을 다듬습니다.
ASCIIEncoding.ASCII.GetString(data).Trim();
나는 줄을 잘 얻지 만 여전히 모든 엔딩 공간이 있습니다. 그래서 나는 같은 것을 얻습니다 "qwerty.........."
(여기서 도트는 stackoverflow로 인한 공간입니다).
내가 뭘 잘못하고 있죠?
또한 .trimend ()를 사용하고 UTF8 인코딩을 사용하려고했지만 아무것도 변경하지 않습니다.
미리 감사합니다 :)
해결책
너가해야되는 TrimEnd(new char[] { (char)0 });
이것을 고치려면. 그것은 공간이 아닙니다. 실제로 이상하게 변환되는 널 캐릭터입니다. 나도이 문제가 있었다.
다른 팁
그들은 실제로 공간이 아닙니다.
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
... 트릭을해야합니다.
-이신
기본적으로 트림 공백 만 제거합니다, 공백에 의해 정의되는 곳 char.IsWhitespace
.
'\0'
공백이 아닌 제어 문자입니다.
당신은 그것을 사용하여 트림 할 문자를 지정할 수 있습니다 Trim(char[])
초과 적재:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
왜 먼저 문자열을 만들고 두 번째로 트림을하려고합니까? 이것은 많은 오버 헤드를 추가 할 수 있습니다 (바이트 []가 큰 경우).
지정할 수 있습니다 index
그리고 count
에서 GetString(byte[] bytes, int index, int count)
초과 적재.
int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want
PowerShell에서는 다음을 수행 할 수 있습니다.
$yourString.TrimEnd(0x00)
제휴하지 않습니다 StackOverflow