我想将包含二进制数的字符串转换为字节数组。 为此,我有这个功能:
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;
我做错了什么?
答案 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
。由于int
到byte
不是隐含的(可能会发生数据丢失),因此您必须明确执行强制转换,如上面的行所示。
答案 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;
}