문제
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의 답변에서 바이트로 바꾸십시오.
제휴하지 않습니다 StackOverflow