문제

바이트 쌍을 가져 와서 반바지를 출력하고 반바지와 출력 바이트 쌍을 가져와야합니다. 다음은 제가 그런 목적을 위해 고안 한 기능입니다.

static short ToShort(short byte1, short byte2)
{
    short number = (short)byte2;
    number <<= 4;
    number += (short)byte1;
    return number;
}
static void FromShort(short number, out byte byte1, out byte byte2)
{
    byte byte2 = (byte)(number >> 4);
    short tempByte = (short)byte2 << 4;
    byte byte1 = (byte)(number - tempByte);
}

나는 이것이 정확하다고 생각하지만 확실하지 않습니다. 이것이 올바른 방법이 아니라면 무엇입니까? 이미 프레임 워크 에서이 작업을 수행 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

짧은 버전 (4 대신 8 비트를 이동) :

static short ToShort(short byte1, short byte2)
{
    return (byte2 << 8) + byte1;
}

static void FromShort(short number, out byte byte1, out byte byte2)
{
    byte2 = (byte)(number >> 8);
    byte1 = (byte)(number & 255);
}

다른 팁

사용 비트 컨버터

short number = 42;
byte[] numberBytes = BitConverter.GetBytes(number);
short converted = BitConverter.ToInt16(numberBytes);

바이트는 4가 아닌 8 비트이므로 이동이 꺼져 있습니다. 또한 두 번째 함수에서 로컬 변수를 선언하여 out 의도 한 매개 변수. 자신을 BitTise 작업으로 제한하면 더 명확하고 더 좋습니다 (&, |, 그리고 ~) 가능한 곳.

static short ToShort(byte byte1, byte byte2)
{
    return (short) ((byte2 << 8) | (byte1 << 0));
}

static void FromShort(short number, out byte byte1, out byte byte2)
{
    byte2 = (byte) (number >> 8);
    byte1 = (byte) (number >> 0);
}

왼쪽과 오른쪽으로 0으로 이동하는 것은 불필요하며 엄격하게 말하면됩니다. 나는 단지 대칭을 위해 그것들을 넣었습니다. 또한 개인적으로 나는 단지 약간의 산술 감기를 배우고 이와 같은 작문을 건너 뛰는 것이 좋습니다. 매우 근본적인 내용으로 세부 사항을 숨길 필요가 없습니다.

바이트를 복용하고 싶다면 ... 바이트를 가져 가십시오. 그리고 당신의 변화는 꺼져 있습니다 | 더 직관적입니다 :

static short ToShort(byte byte1, byte byte2)
{   // using Int32 because that is what all the operations return anyway...
    return (short)((((int)byte1) << 8) | (int)byte2);
}
static void FromShort(short number, out byte byte1, out byte byte2)
{
    byte1 = (byte)(number >> 8); // to treat as same byte 1 from above
    byte2 = (byte)number;
}

System.BitConverter

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