我在进行一些转换时遇到了麻烦,并且找不到代码有什么问题,或者不知道它必须做什么。
我有以下字节[]
byte[] bytes = {0xFF, 0xFF, 0xFE};
我以这种方式将其转换为 ulong :
ulong next = ((uint)((((0x00 << 4) | bytes[0]) << 16) | ((bytes[1] << 8) | bytes[2])));
接下来我将 1 添加到下一个:
next++;
然后,我想将 ulong 转换回字节数组。我尝试了在这里和网上找到的几种 bcd 算法,但我无法得到我期望的结果:
byte[] bytes = {0xFF, 0xFF, 0xFF};
安装的
{ 0x15, 0x72, 0x77, 0x16}
我尝试过的大多数解决方案都得到了这一点。
这是我使用的算法之一:
static Byte[] CopyAsBCD(UInt32 value)
{
Byte[] buffer = new byte[4];
Int32 offset = 0;
var length = 4;
var s = value.ToString();
var stringIndex = s.Length - 1;
var bufferIndex = offset + length - 1;
var isLower = true;
try
{
while (bufferIndex >= offset && stringIndex > -1)
{
if (isLower)
buffer[bufferIndex] = Byte.Parse(s[stringIndex].ToString());
else
buffer[bufferIndex] += (Byte)(Byte.Parse(s[stringIndex].ToString()) << 4);
if (!isLower)
bufferIndex--;
isLower = !isLower;
stringIndex--;
}
}
catch
{
}
return buffer;
}
我做错了什么?还是我有概念问题?