C#을 사용하여,무엇을 가장 효율적인 방법으로 변환한 문자열을 포함하는 이진 데이터 바이트의 배열

StackOverflow https://stackoverflow.com/questions/72176

  •  09-06-2019
  •  | 
  •  

문제

가있는 동안 100 를 해결하는 방법의 변환 문제,내가 초점을 맞추고 있습니다.

제공하는 문자열에만 이진 데이터를 포함,무엇이 가장 빠른 방법,성능 측면에서 변환하는 데이터를 byte[]지 않는(char[])아래는 C#?

설명:이 ASCII 데이터,오히려는 데이터는 바이너리에서 일어나는 문자열을 사용합니다.

도움이 되었습니까?

해결책

나는 확실하지 않 ASCIIEncoding.GetBytes 그것을 할 것이기 때문에,그것만 지원 범위 0x0000~0x007F.

당신은 말할 문자열이 포함 바이트입니다.하지만.NET 문자열을 배열의 문자,그리고 1char 는 2 바이트(기 때문이다.NET 문자열을 저장으로 UTF16).할 수 있도록 하는 두 가지 상황을 저장하는 바이트로 0x42 및 0x98:

  1. 문자열에는 ANSI 문자열을 포함 바이트로 변환되는 유니코드 문자열로,따라서 바이 될 것입니다 0x00 0x42 0x00 0x98.(문자열로 저장되 0x0042 및 0x0098)
  2. 문자열을 그냥 바이트 배열을 typecasted 거나 받을 문자열되었고,따라서 다음과 같은 바이트로 0x42 0x98.(문자열로 저장되 0x9842)

에서 첫 번째는 상황에서 결과는 것 0x42 및 0x3F(ascii"B?").두 번째는 상황에 0x3F(ascii 에 대한"?").이것은 논리적이기 때문에,문자는 외부의 유효한 ascii 범위 및 인코더가 무엇을 해야할지 모르겠으로 해당 값이 적용됩니다.

그래서 나는 이유를 궁금 그것은 문자열과 함께 바이트?

  • 어쩌면 그것은 포함되는 바이트 인코딩된 문자열로(예를 들어 Base64)?
  • 어쩌면 당신은 시작해야 하는 char 배열 또는 바이트 배열?

당신이 정말 하는 상황 2 얻고 싶으신 바이트 그것의 사용해야 합니다 UnicodeEncoding.GetBytes 전화입니다.기 때문에 돌려보낼 것이다 0x42 및 0x98.

하고 싶은 경우에서 가는 char 배열 바이트 배열로,가장 빠른 방법이 될 것이다 마샬링..하지만 정말 좋은,사용중 메모리입니다.

public Byte[] ConvertToBytes(Char[] source)
{
    Byte[] result = new Byte[source.Length * sizeof(Char)];
    IntPtr tempBuffer = Marshal.AllocHGlobal(result.Length);
    try
    {
        Marshal.Copy(source, 0, tempBuffer, source.Length);
        Marshal.Copy(tempBuffer, result, 0, result.Length);
    }
    finally
    {
        Marshal.FreeHGlobal(tempBuffer);
    }
    return result;
}

다른 팁

그런 일이 없 으로 ASCII 문자열에서는 C#!문자열 을 포함 UTF-16.을 깨닫지 않는 이는 많은 문제가 발생합니다.는 말했다,방법들을 통해서 언급하기 전에 작업하기 때문에 그들은 그들을 고려하는 문자열로 UTF-16 인코딩을 변환할 문자는 ASCII 기호입니다.

/편집에 응답을 설명:어떻게 데이터는 바이너리에서 문자열?문자열되어 있지 않을 포함하는 데이터는 바이너리(사용 byte[] 한).

가고 싶은 경우에는 문자열에서 이진 데이터 가 무엇인지 알아야 합니다 인코딩을 변환하는 데 사용된 데이터는 바이너리하는 문자열에서 첫 번째 장소.그렇지 않으면,당신은하지 않을 수 있습 끝나 올바른 이진 데이터이다.그래서,가장 효율적인 방법을 가능성이 높 GetBytes()를 인코딩 하위 클래스(예:면 utf8encoding),하지만 당신은 확실히 알고 있는 인코딩이 있습니다.

코멘트에 의해 켄트 Boogaart 에서 원래의 질문은 그것을 있습니다.;]

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top