移位N位您好关于移位的快速问题我有一个值HEX=newbyte[]{0x56,0xAF};这是0101011010101111我想要第一个n位,示例12并移动剩余的4(16-12)以获得0000010101101010(1386dec)我无法绕过它并使其可扩展到n位。谢谢!前段时间写了这两个函数,第一个把byte[]左移指定位数,第二个右移:shiftleft:publicbyte[]ShiftLeft(byte[]value,intbitcount){byte[]temp=newbyte[value.Length];if(bitcount>=8){Array.Copy(value,bitcount/8,temp,0,temp.Length-(bitcount/8));}else{Array.Copy(value,temp,temp.Length);}if(bitcount%8!=0){for(inti=0;i>8-bitcount%8);}}}返回温度;}右移:publicbyte[]ShiftRight(byte[]value,intbitcount){byte[]temp=newbyte[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(inti=temp.Length-1;i>=0;i--){temp[i]>>=bitcount%8;if(i>0){temp[i]|=(byte)(temp[i-1]如果您需要进一步说明,请对此发表评论,我将编辑我的帖子以澄清...您可以使用BitArray然后轻松地从右向右复制每一位。http://msdn.microsoft.com/en-us/library/system.collections.bitarray_methods.aspx你想要像...varHEX=newbyte[]{0x56,0xAF};varbits=newBitArray(十六进制);intbitstoShiftRight=4;for(inti=0;i如果你总共有k位,并且你想要“第一个”(最重要的)n位,你可以简单地右移kn次。最后kn位将被删除,输入“降序”从末尾开始,第一个n将移到最低位。假设bits_in_byte是一个字节中的位数,如在其他地方确定的那样,使用类似C表示法的答案:intremove_bits_count=HEX.count*bits_in_byte-bits_to_keep;intremove_bits_in_byte_count=remove_bits_count%bits_in_byte;if(remove_bits_count>0){for(intiteration=0;iteration=0){intread_index_hi=read_index_bit_lo-重新计数(-1)/bits_in_byte;HEX[write_index]=(HEX[read_index_lo]>>remove_bits_in_byte_count)|(HEX[read_index_hi]假设你想覆盖原来的数组,你基本上取出你写的每个字节,并找出它从中获得移位位的字节数。你从数组的末尾前进到前面以确保您永远不会覆盖需要读取的数据。以上就是C#学习教程:ShiftingNBits分享的全部内容,如果对大家有用,需要进一步了解C#学习教程。希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
