字节数组的问题,我不能左移字节

时间:2014-04-30 07:20:42

标签: c# byte bytearray

我想将包含二进制数的字符串转换为字节数组。 为此,我有这个功能:

private byte[] ToByteArray(string StringToConvert)
{
   byte[] ByteArray = new byte[StringToConvert.Length/8];
   byte temp;
   for (int i = 0; i < StringToConvert.Length; i=i+8)
   {
      for (int j = i; j < 8; j++)
      {
         temp = Convert.ToByte(StringToConvert[j]);
         ByteArray[i]=ByteArray[i] << temp;
      }
   }

   return ByteArray;
}

我收到错误,我无法将字节转换为

的int(?)
ByteArray[i]=ByteArray[i]<< temp;

我做错了什么?

3 个答案:

答案 0 :(得分:1)

这会将包含二进制数字{@ 1}}的字符串转换为字节数组"001011101101011010101011"

{ 46, 214, 171 }

答案 1 :(得分:0)

使用

ByteArray[i] = (byte)(ByteArray[i] << temp);

MSDN (Shift Operators)所述,以下是预定义的移位运算符

int operator <<(int x, int count);
uint operator <<(uint x, int count);
long operator <<(long x, int count);
ulong operator <<(ulong x, int count);

并且字节值(ByteArray[i])与第一个运算符规范匹配,然后调用该规范并返回int值。因此,要将int值存储在byte中,您必须将其类型转换为byte。由于intbyte不是隐含的(可能会发生数据丢失),因此您必须明确执行强制转换,如上面的行所示。

答案 2 :(得分:0)

我将在两行之间读取并猜测StringToConvert是一个包含8'0或'1'的倍数的字符串,而你要做的就是将它转换为字节数组。

private byte[] ToByteArray(string StringToConvert)
{
    byte[] ByteArray = new byte[StringToConvert.Length/8];
    for (int i = 0; i < StringToConvert.Length/8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            char bitStr = StringToConvert[i*8+j];
            ByteArray[i] = (byte)((ByteArray[i] << 1) | (bit=='1' ? 1 : 0));
        }
    }

    return ByteArray;
}