1

我正在读取一个文件,其中包含一组表示为 BCD(二进制编码十进制)的值。这些值可以用不同的字节长度表示。

例如,V 的值:
V= 00 08 88 88
V= 10 00 00 00 08 34 00 00
V= 11 32 22 01 11 00 00 00 00 00 00 00
注意:不考虑空格,我将它们设置为阅读目的,00 08 88 88 的实际值为 00088888。

我的问题是我需要从 V 中删除零。
上述解决方案应该是:
V= 00 08 88 88
V= 10 00 00 00 08 34
V= 11 32 22 01 11

解决我的问题的一种简单方法是迭代并从最低有效位中删除,直到达到非零位。你有什么建议?

4

1 回答 1

0

右移你的字节直到MyValue AND 0x01 > 0

public byte[] ShiftRight(byte[] value, int bitcount)
{
    byte[] temp = new byte[value.Length];
    if (bitcount >= 8)
    {
        Array.Copy(value, 0, temp, bitcount / 8, temp.Length - (bitcount / 8));
    }
    else
    {
        Array.Copy(value, temp, temp.Length);
    }
    if (bitcount % 8 != 0)
    {
        for (int i = temp.Length - 1; i >= 0; i--)
        {
            temp[i] >>= bitcount % 8;
            if (i > 0)
            {
                temp[i] |= (byte)(temp[i - 1] << 8 - bitcount % 8);
            }
        }
    }
    return temp;
}

代码取自这里的另一篇文章

于 2013-02-26T15:03:32.553 回答