将十六进制字符串转换为二进制字符串 C#

3

我正在尝试将十六进制字符串转换为二进制。我的代码如下所示:

sw.Write(Convert.ToString(Convert.ToInt32(value, 16), 2));

对于大多数值来说,这样做是可行的;但是当我将十六进制字符串0x101转换为二进制字符串时,我的结果是100000001,而不是000100000001。请帮助我。


4
好的,那确实是二进制值。你是说需要始终填充到4位数的倍数吗? - Jon Skeet
有关编程的内容翻译:这重要吗?前导0没有意义... - Thomas Levesque
是的,在我的应用程序中这很重要。所以,如果我有 Hex = 001,那么 Binary 应该变成 000000000001。我该怎么做? - savi
1
如果我有一个十六进制值为001,那么Hex是整数还是字符串? - L.B
2个回答

5
string Hex = "001";
var s = String.Join("", 
          Hex.Select(x => Convert.ToString(Convert.ToInt32(x+"", 16), 2).PadLeft(4,'0')));

如何将二进制转换为十六进制?二进制字符串000001010100应该变成054? - savi
1
@savi 为什么问我? - L.B

-1

使用 String.PadLeft() 怎么样?

string value = "0x001";
string binary = Convert.ToString(Convert.ToInt32(value, 16), 2).PadLeft(12, '0');

你不能只是像那样硬编码12; 如果十六进制值为0x1001,则需要填充到16个字符。 - Thomas Levesque
@ThomasLevesque 在 PadLeft() 中的 12 是填充后字符串的总长度。http://msdn.microsoft.com/zh-cn/library/92h5dc07(v=vs.110).aspx - Mike Hixson
是的,我知道PadLeft的作用...但它只适用于小于12个二进制数字的数字。OP需要填充到4个数字的倍数。如果值为0x1001,则非填充结果将有13个数字,并且将其填充到12个数字将没有效果;在这种情况下,您需要将其填充到16个数字。 - Thomas Levesque

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