c#十六进制到位转换

san*_*art 3 c# hex

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

我试过了

string result = Convert.ToString(Convert.ToUInt64(value, 16), 2);
Run Code Online (Sandbox Code Playgroud)

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

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

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

ken*_*n2k 7

以下代码有什么问题?

string hex = "FFFFFFFFFFFFFFFF";

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

// Returns 1111111111111111111111111111111111111111111111111111111111111111
string binRepresentation = Convert.ToString(longValue, 2);
Run Code Online (Sandbox Code Playgroud)

几乎你写(只固定ulonglong投),并返回你所期望的.

编辑:取消删除此答案,因为即使long表示已签名,二进制表示实际上是您所期望的.


Cod*_*bie 4

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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