我一直在尝试这个.我有一个字节数组,我想将其转换为ulong并将值返回到另一个函数,该函数应该返回字节值.
我尝试过bithifting,但在少数情况下它没有成功.比特换档有替代品吗?或者你有什么简短的例子吗?谢谢您的帮助.
这是我使用的bitshift代码,我不明白为什么第二个条目不是00000001:
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[]responseBuffer = {0,1,2,3,4,5};
UInt64 my = (UInt64)(((UInt64)(((responseBuffer[0]) << 40) & 0xFF0000000000)) |
(UInt64)(((responseBuffer[1]) << 32) & 0x00FF00000000) |
(UInt64)(((responseBuffer[2]) << 24) & 0x0000FF000000) |
(UInt64)(((responseBuffer[3]) << 16) & 0x000000FF0000) |
(UInt64)(((responseBuffer[4]) << 8) & 0x00000000FF00) |
(UInt64)(responseBuffer[5] & 0xFF));
UInt64[] m_buffer = {(UInt64)((my >> 40) & 0xff),
(UInt64)((my >> 33) & 0xff) ,
(UInt64)((my >> 24) & 0xff) ,
(UInt64)((my>> 16) & 0xff) ,
(UInt64)((my>> 8) & 0xff) ,
(UInt64)(my& 0xff)};
Console.WriteLine("" + m_buffer[1]);
//string m_s = "";
StringBuilder sb = new StringBuilder();
for (int k = 0; k < 6; k++)
{
int value = (int)m_buffer[k];
for (int i = 7; i >= 0; i--)
{
if ((value >> i & 0x1) > 0)
{
sb.Append("1");
value &= (Byte)~(0x1 << i);
}
else
sb.Append("0");
}
sb.Append(" ");
}
Console.WriteLine(sb.ToString());
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud)
}
首先,我会弄清楚比特换档出了什么问题,万一你再次需要它.它应该工作正常.
其次,还有一个替代BitConverter.ToUInt64和BitConverter.GetBytes(ulong)使用该系统字节序,如果你很高兴.
如果你想能够指定字节顺序,我可以使用EndianBitConverter我的MiscUtil库中的一个类.
(如果你只是需要它在同一种机器上是可逆的,我会坚持使用内置的机器.)