簡體   English   中英

c#十六進制到位轉換

[英]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);

幾乎你寫的東西(只修了ulonglong演員),並返回你所期望的。

編輯:取消刪除此答案,因為即使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM