我正在尝试将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'
以下代码有什么问题?
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)
几乎你写(只固定ulong
于long
投),并返回你所期望的.
编辑:取消删除此答案,因为即使long
表示已签名,二进制表示实际上是您所期望的.
可能有更好的解决方案,但请检查这是否有效:
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。那里的代码看起来与我提供的非常相似,所以我认为它是一个不错的解决方案。
归档时间: |
|
查看次数: |
12676 次 |
最近记录: |