[英]c# hex to bit conversion
我正在嘗試將64位數字的十六進制表示(例如,字符串"FFFFFFFFF"
)轉換為二進制表示( "11111..."
)。
我試過了
string result = Convert.ToString(Convert.ToUInt64(value, 16), 2);
但這會導致令人困惑的編譯器錯誤:
'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);
幾乎你寫的東西(只修了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;
}
最方便的方法是使用Convert.ToString(Int64, Int32)
,但ulong沒有重載。 另一個解決方案是Convert.ToString(UInt64, IFormatProvider)
並編寫自己的IFormatProvider。 通過查看示例,我找到了一個IFormatProvider,它以二進制,八進制和十六進制字符串表示格式化數字: http : //msdn.microsoft.com/en-us/library/system.icustomformatter.aspx 。 那里的代碼與我提供的代碼非常相似,所以我認為它不是一個糟糕的解決方案。
最好的選擇是:
public static string hex2bin(string value)
{
return Convert.ToString(Convert.ToInt32(value, 16), 2).PadLeft(value.Length * 4, '0');
}
這是一個粗暴的方法,沒有pancy 64bit限制:
string HexStringToBinary(string hexString)
{
var lup = new Dictionary<char, string>{
{ '0', "0000"},
{ '1', "0001"},
{ '2', "0010"},
{ '3', "0011"},
{ '4', "0100"},
{ '5', "0101"},
{ '6', "0110"},
{ '7', "0111"},
{ '8', "1000"},
{ '9', "1001"},
{ 'A', "1010"},
{ 'B', "1011"},
{ 'C', "1100"},
{ 'D', "1101"},
{ 'E', "1110"},
{ 'F', "1111"}};
var ret = string.Join("", from character in hexString
select lup[character]);
return ret;
}
如果使用這種以十六進制字符串轉換成BitArray然后產生二進制表示的任務很簡單:
BitArray barray = ConvertHexToBitArray(string hexData)
var sbuild = new StringBuilder();
for (int i = 0; i < barray.Length; i++)
{
sbuild.Append(barray[i] ? "1" : "0");
}
Console.WriteLine(sbuild.ToString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.