题
我需要对以字节为单位,和输出短路的,并采取在短裤和字节输出对。下面是我已经设计出这样的目的的功能:
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
不隶属于 StackOverflow