删除BCD字符串中等于0的最低有效位

时间:2013-02-26 14:58:51

标签: c# bit-manipulation

我正在读取一个文件,其中包含一组表示为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

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

1 个答案:

答案 0 :(得分: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;
}

从另一篇帖子here获取的代码。