我需要开发两个函数来对字节进行组合和单独操作。
public byte Combine(Byte a, Byte b)
{
// ... Operations ...
}
public byte[] Separate(Byte input)
{
// ... Operations ...
}
public static void Main(String[] args)
{
Byte a, b, c;
a = <SOME BYTE VALUE>;
b = <SOME OTHER BYTE VALUE>;
Console.Writeline("Before Operation");
Console.Writeline("a = " + Convert.ToString(a, 2));
Console.Writeline("b = " + Convert.ToString(b, 2));
// Combine Function called...
c = Combine(a, b);
// Separate Function called...
byte[] d = Separate(c);
a = d[0];
b = d[1];
Console.Writeline("After Operation");
Console.Writeline("a = " + Convert.ToString(a, 2));
Console.Writeline("b = " + Convert.ToString(b, 2));
Console.ReadKey();
}
我尝试过很多事情,例如执行 AND,OR,XOR,NAND,NOT 和 LEFT 的组合以及 RIGHT SHIFT 操作在此基础上实现上述功能。
我只是想知道有没有办法做到这一点,或者Wether首先编写这种类型的功能。
我需要你宝贵的建议和意见......
答案 0 :(得分:1)
就像你在评论中看到的那样,你不能在1字节内存储2个字节。如果可以实现它,你可能会成为世界上最天才的人 - 每一个数据都可以被压缩两次!
相反,你可以在32位int中存储两个16位的int:
public static uint ToInt(ushort first, ushort second)
{
return (uint)(first << 16) | second;
}
public static ushort ExtractFirst(uint val)
{
return (ushort)((val >> 16) & ushort.MaxValue);
}
public static ushort ExtractSecond(uint val)
{
return (ushort)(val & ushort.MaxValue);
}
接下来,我们可以将两个字节存储为一个16位int
:
public static ushort ToShort(byte first, byte second)
{
return (ushort)((first << 8) | second);
}
public static byte ExtractFirst(ushort location)
{
return (byte)((location >> 8) & byte.MaxValue);
}
public static byte ExtractSecond(ushort location)
{
return (byte)(location & byte.MaxValue);
}