c#十六进制到位转换

我试图将64位数字的十六进制表示(例如字符串"FFFFFFFFF" )转换为二进制表示( "11111..." )。

我试过了

string result = Convert.ToString(Convert.ToUInt64(value, 16), 2);

但是这会导致一个令人困惑的编译器错误:

'System.Convert.ToString(object,System.IFormatProvider)'的最佳重载方法匹配有一些无效参数

参数2:无法从'int'转换为'System.IFormatProvider'


可能有更好的解决方案,但请检查它是否有效:

public static string HexToBinary(string hexValue)
{
    ulong number = UInt64.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

    byte[] bytes = BitConverter.GetBytes(number);

    string binaryString = string.Empty;
    foreach (byte singleByte in bytes)
    {
        binaryString += Convert.ToString(singleByte, 2);
    }

    return binaryString;
}

最方便的方法是使用Convert.ToString(Int64, Int32) ,但ulong没有超载。 另一种解决方案是Convert.ToString(UInt64, IFormatProvider)并编写您自己的IFormatProvider。 通过查看示例,我发现了一个以二进制,八进制和十六进制字符串表示格式化数字的IFormatProvider:http://msdn.microsoft.com/en-us/library/system.icustomformatter.aspx。 那里的代码看起来和我提供的非常相似,所以我认为它不是一个糟糕的解决方案。


下面的代码有什么问题?

string hex = "FFFFFFFFFFFFFFFF";

// Returns -1
long longValue = Convert.ToInt64(hex, 16);

// Returns 1111111111111111111111111111111111111111111111111111111111111111
string binRepresentation = Convert.ToString(longValue, 2);

几乎你写的(唯一的固定的ulonglong投),并返回你所期望的。

编辑:取消删除这个答案,因为即使long签名,二进制表示实际上是你期望的。


最好的选择是:

public static string hex2bin(string value)
        {
            return Convert.ToString(Convert.ToInt32(value, 16), 2).PadLeft(value.Length * 4, '0');
        }
链接地址: http://www.djcxy.com/p/15883.html

上一篇: c# hex to bit conversion

下一篇: linq query where int ID belongs to List<int>