我需要对以字节为单位,和输出短路的,并采取在短裤和字节输出对。下面是我已经设计出这样的目的的功能:

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);
}

我认为这是正确的,但我不知道。如果不这样做的正确方法是什么?有没有办法在框架已经这样做了?

有帮助吗?

解决方案

更短的版本(也移位8位而不是4):

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);
}

其他提示

使用 BitConverter

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

字节是8个比特,而不是4,所以你的换档是关闭的。您也宣布在第二个函数的局部变量,所以你就不会落得像你打算写的out参数。它也更清晰/更好,如果你限制自己的位操作(&|~)在可能的情况。

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);
}

请注意的是,左和右移位的零是不必要的,严格来说。我只是把那些为对称。另外,我个人建议你刚学算术按位冷跳过这样的书写辅助函数。没有必要隐瞒的东西很基本,恕我直言细节。

如果你想利用字节...拿个字节;和您的移位是关闭,|会更直观的:

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