2009-09-29 65 views
0

现在我有一个7位字节的数组或字符串,我想从第二个字节中取出最后一位,并将它添加到第一个位置的最右边,依此类推,这将导致新的8位字节是否有任何直接的方式来做到这一点比使用循环和数组? 示例http://www.dreamfabric.com/sms/hello.html 如何通过c#执行此操作? 谢谢。移位字节

回答

1

这里有一个简单的程序,这是否页面想要的东西:

public class Septets 
{ 
    readonly List<byte> _bytes = new List<byte>(); 
    private int _currentBit, _currentByte; 

    void EnsureSize(int index) 
    { 
     while (_bytes.Count < index + 1) 
      _bytes.Add(0); 
    } 

    public void Add(bool bitVal) 
    { 
     EnsureSize(_currentByte); 

     if (bitVal) 
      _bytes[_currentByte] |= (byte)(1 << _currentBit); 

     _currentBit++; 
     if (_currentBit == 8) 
     { 
      _currentBit = 0; 
      _currentByte++; 
     } 
    } 

    public void AddSeptet(byte septet) 
    { 
     for (int n = 0; n < 7; n++) 
      Add(((septet & (1 << n)) != 0 ? true : false)); 
    } 

    public void AddSeptets(byte[] septets) 
    { 
     for (int n = 0; n < septets.Length; n++) 
      AddSeptet(septets[n]); 
    } 

    public byte[] ToByteArray() 
    { 
     return _bytes.ToArray(); 
    } 

    public static byte[] Pack(byte[] septets) 
    { 
     var packer = new Septets(); 
     packer.AddSeptets(septets); 
     return packer.ToByteArray(); 
    } 
} 

实例(如在页面上相同):

static void Main(string[] args) 
{ 
    byte[] text = Encoding.ASCII.GetBytes("hellohello"); 

    byte[] output = Septets.Pack(text); 

    for (int n = 0; n < output.Length; n++) 
     Console.WriteLine(output[n].ToString("X")); 
} 

输出所需的十六进制值(每行一个) :

E8 32 9B FD 46 97 D9 EC 37