문제

32 비트 정수를 C#의 4 개의 (서명되지 않은) 숯으로 나누는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

Quick'n'dirty :

int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
  BitConverter.GetBytes(value).Reverse().ToArray()
));

int를 바이트로 변환하고 올바른 순서를 위해 바이트 어레이를 역전시킨 다음 ASCII 문자 표현을 가져옵니다.

편집 : 리버스 메소드는 정보를 위해 .NET 3.5의 확장 메소드입니다. 시나리오에서 바이트 순서를 되돌리는 것도 필요하지 않을 수 있습니다.

건배, 데이비드

다른 팁

숯? 이 편리한 작은 도우미 기능을 찾고 있습니까?

Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]

이것이 당신이 실제로 원하는 것인지 확실하지 않지만 :

int x = yourNumber();
char a = (char)(x & 0xff);
char b = (char)((x >> 8) & 0xff);
char c = (char)((x >> 16) & 0xff);
char d = (char)((x >> 24) & 0xff);

이것은 당신이 가장 낮은 범위의 유니 코드 문자로 해석되는 바이트를 원한다고 가정합니다.

나는 그것을 몇 가지 방법으로 시도하고 10000000 INT를 변환하는 데 걸리는 시간을 시계했습니다.

내장 변환 방법, 325000 진드기 :

Encoding.ASCII.GetChars(BitConverter.GetBytes(x));

포인터 변환, 100000 진드기 :

static unsafe char[] ToChars(int x)
{
    byte* p = (byte*)&x)
    char[] chars = new char[4];
    chars[0] = (char)*p++;
    chars[1] = (char)*p++;
    chars[2] = (char)*p++;
    chars[3] = (char)*p;

    return chars;
}

비트 시프트, 77000 진드기 :

public static char[] ToCharsBitShift(int x)
{
     char[] chars = new char[4];
     chars[0] = (char)(x & 0xFF);
     chars[1] = (char)(x >> 8 & 0xFF);
     chars[2] = (char)(x >> 16 & 0xFF);
     chars[3] = (char)(x >> 24 & 0xFF);
     return chars;
}

8 바이트 블록을 얻으십시오.

int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000

처음 3 바이트를 단일 바이트로 나누고 적절한 숫자로 나누고 다른 논리적 바이트를 수행하고 최종 바이트를 얻으십시오.

편집 : Bitshifts가있는 Jason의 솔루션은 물론 훨씬 좋습니다.

비트 컨버터

.NET은 유니 코드를 사용하고 숯은 2 바이트입니다 1

비 유니 코드 텍스트를 포함하는 이진 데이터를 변환하려면 System.text.encoding 클래스를 사용하십시오.

숯이 아닌 4 바이트를 원한다면 숯을 Jason의 답변에서 바이트로 바꾸십시오.

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