C#中将字节转换为二进制字符串 - 显示所有8位数

43

我想在文本框中显示一个字节。目前我正在使用以下代码:

Convert.ToString(MyVeryOwnByte, 2);

但是当字节开头有0时,这些0会被切掉。 例如:

MyVeryOwnByte = 00001110 // Texbox shows -> 1110
MyVeryOwnByte = 01010101 // Texbox shows -> 1010101
MyVeryOwnByte = 00000000 // Texbox shows -> <Empty>
MyVeryOwnByte = 00000001 // Texbox shows -> 1

我想要显示所有的8位数字。


请参见:https://dev59.com/T0rSa4cB1Zd3GeqPTApn,特别是https://dev59.com/T0rSa4cB1Zd3GeqPTApn/1644666#1644666。 - Jeff Yates
由于这个问题中的代码已经被另一个用户误解了,因此应该指出MyVeryOwnByte在这里实际上不是一个byte,而且(如果那是实际使用的C#代码)像01010101这样的文字是十进制数(碰巧只由零和一组成);构成这些数字的字节的实际位看起来完全不同。 - O. R. Mapper
@O.R.Mapper 这只是“伪代码”。 - Hooch
@Hooch: 好的,那么只有 另一个问题 的作者可能是错的。 - O. R. Mapper
这个回答解决了你的问题吗?将整数转换为带前导零的二进制字符串 - Jason C
4个回答

76
Convert.ToString(MyVeryOwnByte, 2).PadLeft(8, '0');

使用此方法将会在字符串左侧填充空白处,填充字符为'0',总共填充8个字符


13

如何实现取决于你想要的输出格式。

如果你只需要“00011011”,可以使用以下函数:

static string Pad(byte b)
{
    return Convert.ToString(b, 2).PadLeft(8, '0');
}

如果你想要像 "00011011" 这样的输出,可以使用以下函数:

static string PadBold(byte b)
{
    string bin = Convert.ToString(b, 2);
    return new string('0', 8 - bin.Length) + "<b>" + bin + "</b>";
}
如果你想要输出"0001 1011"这样的结果,一个类似这样的函数可能更好:
static string PadNibble(byte b)
{
    return Int32.Parse(Convert.ToString(b, 2)).ToString("0000 0000");
}

@Jeff:我发布了这个版本,因为有时候new string()技巧是有用的。你没有质疑Gregory提到的PadRight函数,而那个函数甚至不能解决问题。 - Gabe
我对别人的回答做出何种反应完全不相关。我只是觉得你通过提到一个更好的解决方案来贬低自己的答案,并且你提出的建议并不容易阅读,这让我感到奇怪。由于SO是获取好答案的资源,因此最好将PadLeft解决方案和你的替代方案都包含在内 - 那么你可能会成为更好的答案。这不是关于第一,而是关于最好的。 - Jeff Yates
@Jeff:我更喜欢每个答案都有一个单独的帖子,这样人们可以轻松浏览答案而不必浏览重复内容。然而,今天我为了你做了一个例外,把三个答案放在了一个帖子里。 - Gabe
第三个答案几乎接近我所寻找的。我需要的模式是00 00 00 00 ... 我想我已经弄清楚了 :) - THBBFT

1

使用零填充字符串。 在本例中是PadLeft(length,characterToPadWith)。非常有用的扩展方法。PadRight()是另一个有用的方法。


1
PadRight是一个有用的方法,但在这种情况下不适用。我建议你从答案中删除它(或添加其他有用的.NET方法 - 我知道我会选择哪个:D)。 - Jeff Yates
1
另外,它们不是扩展方法。 - Gabe

0

你可以创建一个扩展方法:

public static class ByteExtension
{
    public static string ToBitsString(this byte value)
    {
        return Convert.ToString(value, 2).PadLeft(8, '0');
    }
}

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