将0和1的字符串转换为字节数组
本文关键字:字节 字节数 数组 转换 字符串 | 更新日期: 2023-09-27 17:49:52
我想在文本框中写入以下位序列,如下所示:
000101100000000100000001000000010000000000100111001100010010000000110000001011100011000000110000001100000011000000100000001100110011100100101110001101110011010100100000001100000010111000110000001110000010000000110000001011100011000000110000001000000011000000101110001100000011000000110000001100000000010111010111
但是每8位对应一个字节,所以我想将它们存储在byte[]
数组中。当然,如果我这样读它们:
byte[] byteBuffer = Encoding.ASCII.GetBytes(messageTextBox.Text);
每个0
或1
变成一个完整的字节,这不是我想要的。
有什么直接的解决方案,像一些现有的方法,或者我必须开发我自己的?
我在没有任何编译器的情况下编写了以下代码,所以请道歉语法错误-你也必须照顾自己到达文本字符串的末尾,它不包括在内。我认为下面的方法可以满足你的要求。
private bytes[] extractBytes (string text) {
byte[] bytes = new byte[100];
int i = 0;
int j = 0;
string currentByte = "";
while (i <= text.Length) {
currentByte += text.Substring(i, 1);
i++;
if (i % 8 == 0) {
j++;
bytes[j] = convertToDecimal(currentByte);
currentByte = "";
}
)
return bytes;
}
如果要保存由从字符串中提取的二进制值表示的十进制值,可以使用以下转换方法:
private byte convertToDecimal (string binary) {
int i = 0;
int byte = 0;
while (i < s.Length) {
if (s.Substring(s.Length - 1 - i, 1).Equals("1")) {
sum += (byte)Math.Pow(2, i);
}
i++;
}
return sum;
}
您可以使用Convert.ToByte()
并执行以下操作:
string str = messageTextBox.Text;
byte[] byteBuffer = Enumerable.Range(0, str / 8).
Select(pos => Convert.ToByte(
str.Substring(pos * 8, 8),
2)).ToArray();