将一个byte[]转换为其二进制字符串表示

4

我需要将一个Byte[]转换为包含二进制数字序列的string。我不能使用Encoding,因为它只是将字节编码为字符!

例如,有这个数组:

new byte[] { 254, 1 };

我希望得到这个输出:
"1111111000000001"

2
你是说你想要一个字符串,例如“0110010010100100”吗? - George Duckett
没错!这正是我需要的,我已经将它存储在一个 byte[] 中了。 - Sudantha
你在谈论什么编码?我的意思是,你对编码有什么想法不想要它? - Nayan
1
@Sudantha请给我们提供一个byte[]的输入和值作为示例。 - Security Hound
我更新了问题并添加了一个例子,请检查一下是否符合您的需求。 - Jon
显示剩余5条评论
5个回答

13

您可以使用Convert.ToString将任何数字整数原始类型转换为其二进制表示形式的字符串。使用 LINQ 对数组中每个byte进行此操作并将结果连接起来非常容易:

var input = new byte[] { 254 }; // put as many bytes as you want in here
var result = string.Concat(input.Select(b => Convert.ToString(b, 2)));

更新:

上述代码生成的结果每个输入字节并不总是刚好有8个字符,这会使得仅凭结果无法确定原始输入。为了确保每个字节都有8个字符,需要做出一些小修改:

var result = string.Concat(input.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));

嗨John,我觉得这对我有用...我能够计算结果的长度...但是当我尝试将它带到“文本框”表单时,它不会加载...有什么想法? :) - Sudantha
谢谢John...我已经成功将它放到了richTextBox中。非常感谢您的帮助和支持。 - Sudantha

3
string StringIWant = BitConverter.ToString(byteData);

但我建议使用编码

string System.Text.Encoding.UTF8.GetString(byte[])

编辑: 对于像10101011010这样的数字

来自@Quintin Robinson的回答;

StringBuilder sb = new StringBuilder();
foreach (byte b in myByteArray)
    sb.Append(b.ToString("X2"));

string hexString = sb.ToString();

有一种编程语言中的表示法是FF-FF-... 我认为那是十六进制... 你知道如何将其转换成二进制10101010吗? - Sudantha

2
也许你可以使用 BitArray 类来实现你所需要的功能?参考文档中有一些示例代码,应该很容易转换成你所需要的代码。

1

1
byte[] bList = { 0, 1, 2, 3, 4, 5 };
string s1 = BitConverter.ToString(bList);
string s2 = "";
foreach (byte b in bList)
{
     s2 += b.ToString();
}

在这种情况下,s1 =“01-02-03-04-05”,s2 =“012345”。我不太明白你试图实现什么。

1
就个人而言,我已经理解他想要实现什么了。但是我真的不明白你在这个例子中想要实现什么? - Cristian E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接