문제

이와 비슷한 바이트 배열 (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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top