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

本文关键字:有效位 BCD 字符串 删除 | 更新日期: 2023-09-27 18:01:07

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

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

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

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

删除BCD字符串中等于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;
}

代码取自此处的另一个帖子。