2011-04-10 20 views
12

में लंबी स्ट्रिंग को कनवर्ट करना मैं बाइनरी की एक लंबी स्ट्रिंग को हेक्स स्ट्रिंग में परिवर्तित करने का एक तरीका ढूंढ रहा हूं।बाइनरी से हेक्स सी #

बाइनरी स्ट्रिंग इस "0110011010010111001001110101011100110100001101101000011001010110001101101011"

मैं

hex = String.Format("{0:X2}", Convert.ToUInt64(hex, 2)); 

का उपयोग कर की कोशिश की है की तरह कुछ लग रहा है लेकिन केवल तभी, बाइनरी स्ट्रिंग एक Uint64 यदि स्ट्रिंग काफी लंबे समय है जो इसे जीता 'में फिट बैठता है काम करता है टी।

बाइनरी की एक स्ट्रिंग को हेक्स में बदलने का दूसरा तरीका है?

धन्यवाद

+8

क्यों w क्या आप 'UINT64' से बड़े मान को प्रदर्शित करने वाली स्ट्रिंग को संभालने में सक्षम होने के लिए 'Convert.ToUInt64()' की उम्मीद कर सकते हैं? –

उत्तर

24

मैंने इसे अभी खटखटाया। शायद तुम एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं ...

public static string BinaryStringToHexString(string binary) 
{ 
    StringBuilder result = new StringBuilder(binary.Length/8 + 1); 

    // TODO: check all 1's or 0's... Will throw otherwise 

    int mod4Len = binary.Length % 8; 
    if (mod4Len != 0) 
    { 
     // pad to length multiple of 8 
     binary = binary.PadLeft(((binary.Length/8) + 1) * 8, '0'); 
    } 

    for (int i = 0; i < binary.Length; i += 8) 
    { 
     string eightBits = binary.Substring(i, 8); 
     result.AppendFormat("{0:X2}", Convert.ToByte(eightBits, 2)); 
    } 

    return result.ToString(); 
} 
+0

बहुत उपयोगी, धन्यवाद @ मिच गेहूं। –

-1

आप एक समय में इनपुट नंबर चार अंक ले सकते हैं। इस अंक को पूर्व में कनवर्ट करें (जैसा कि आपने ठीक किया है) तो स्ट्रिंग को सभी को एक साथ जोड़ दें। तो आप आकार से स्वतंत्र रूप से हेक्स में संख्या का प्रतिनिधित्व करने वाली एक स्ट्रिंग प्राप्त करते हैं। आपके इनपुट स्ट्रिंग पर एमएसबी कहां से शुरू करें, इस पर निर्भर करता है कि आपके द्वारा वर्णित आउटपुट स्ट्रिंग को उलट दिया जाना चाहिए।

0

चार बिट को ध्यान में रखते एक हेक्स मान से व्यक्त किया जा सकता, तो आप बस चार के समूह द्वारा जाकर उन्हें अलग से परिवर्तित कर सकते हैं, मूल्य उस तरह से नहीं बदलेगा ।

string bin = "11110110"; 

int rest = bin.Length % 4; 
bin = bin.PadLeft(rest, '0'); //pad the length out to by divideable by 4 

string output = ""; 

for(int i = 0; i <= bin.Length - 4; i +=4) 
{ 
    output += string.Format("{0:X}", Convert.ToByte(bin.Substring(i, 4), 2)); 
} 
1

चार बिट को ध्यान में रखते एक हेक्स मान से व्यक्त किया जा सकता, तो आप बस चार के समूह द्वारा जाकर उन्हें अलग से परिवर्तित कर सकते हैं, मूल्य उस तरह से नहीं बदलेगा।

string bin = "11110110"; 

int rest = bin.Length % 4; 
if(rest != 0) 
    bin = new string('0', 4-rest) + bin; //pad the length out to by divideable by 4 

string output = ""; 

for(int i = 0; i <= bin.Length - 4; i +=4) 
{ 
    output += string.Format("{0:X}", Convert.ToByte(bin.Substring(i, 4), 2)); 
} 
0
static string BinToHex(string bin) 
{ 
    if (bin == null) 
     throw new ArgumentNullException("bin"); 
    if (bin.Length % 8 != 0) 
     throw new ArgumentException("The length must be a multiple of 8", "bin"); 

    var hex = Enumerable.Range(0, bin.Length/8) 
        .Select(i => bin.Substring(8 * i, 8)) 
        .Select(s => Convert.ToByte(s, 2)) 
        .Select(b => b.ToString("x2")); 
    return String.Join(null, hex); 
} 
11

यह आपकी मदद कर सकता है:

string HexConverted(string strBinary) 
    { 
     string strHex = Convert.ToInt32(strBinary,2).ToString("X"); 
     return strHex; 
    } 
+1

अच्छा ब्रो thanx यह मेरे लिए काम किया ..: डी – rummykhan

+4

प्रश्न 64 बिट से अधिक की तारों से संबंधित है। –

4
Convert.ToInt32("1011", 2).ToString("X"); 
+0

क्या आप कृपया बता सकते हैं कि '2' क्या है, दूसरा पैरामीटर – Fazal

+1

'2' 'कनवर्ट.ओआईएनटी 32' विधि बताता है जो प्रदान की गई स्ट्रिंग आधार है 2. हेक्स स्ट्रिंग को "एएबीबीसीसी" को 'int' में परिवर्तित करने पर विचार करें (जो कि है '1118 9 1 9 6'): बस निर्दिष्ट करें कि आपकी स्ट्रिंग आधार 16 में है, इस तरह: 'कनवर्ट करें। ToInt32 (" एएबीबीसीसी ", 16)' –

2

मैं इस विधि के साथ आया था। मैं प्रोग्रामिंग और सी # करने के लिए नया हूँ, लेकिन मुझे आशा है कि आप इसे सराहना करेंगे:

static string BinToHex(string bin) 
{ 
    StringBuilder binary = new StringBuilder(bin); 
    bool isNegative = false; 
    if (binary[0] == '-') 
    { 
     isNegative = true; 
     binary.Remove(0, 1); 
    } 

    for (int i = 0, length = binary.Length; i < (4 - length % 4) % 4; i++) //padding leading zeros 
    { 
     binary.Insert(0, '0'); 
    } 

    StringBuilder hexadecimal = new StringBuilder(); 
    StringBuilder word = new StringBuilder("0000"); 
    for (int i = 0; i < binary.Length; i += 4) 
    { 
     for (int j = i; j < i + 4; j++) 
     { 
      word[j % 4] = binary[j]; 
     } 

     switch (word.ToString()) 
     { 
      case "0000": hexadecimal.Append('0'); break; 
      case "0001": hexadecimal.Append('1'); break; 
      case "0010": hexadecimal.Append('2'); break; 
      case "0011": hexadecimal.Append('3'); break; 
      case "0100": hexadecimal.Append('4'); break; 
      case "0101": hexadecimal.Append('5'); break; 
      case "0110": hexadecimal.Append('6'); break; 
      case "0111": hexadecimal.Append('7'); break; 
      case "1000": hexadecimal.Append('8'); break; 
      case "1001": hexadecimal.Append('9'); break; 
      case "1010": hexadecimal.Append('A'); break; 
      case "1011": hexadecimal.Append('B'); break; 
      case "1100": hexadecimal.Append('C'); break; 
      case "1101": hexadecimal.Append('D'); break; 
      case "1110": hexadecimal.Append('E'); break; 
      case "1111": hexadecimal.Append('F'); break; 
      default: 
       return "Invalid number"; 
     } 
    } 

    if (isNegative) 
    { 
     hexadecimal.Insert(0, '-'); 
    } 

    return hexadecimal.ToString(); 
} 
0

आप स्ट्रिंग में प्रत्येक बाइट का हेक्साडेसिमल प्रतिनिधित्व पर पुनरावृति करना चाहते हैं, तो आपको निम्न एक्सटेंशन का उपयोग कर सकते हैं। मैंने मिच के जवाब को this के साथ जोड़ा है।

static class StringExtensions 
{ 
    public static IEnumerable<string> ToHex(this String s) { 
     if (s == null) 
      throw new ArgumentNullException("s"); 

     int mod4Len = s.Length % 8; 
     if (mod4Len != 0) 
     { 
      // pad to length multiple of 8 
      s = s.PadLeft(((s.Length/8) + 1) * 8, '0'); 
     } 

     int numBitsInByte = 8; 
     for (var i = 0; i < s.Length; i += numBitsInByte) 
     { 
      string eightBits = s.Substring(i, numBitsInByte); 
      yield return string.Format("{0:X2}", Convert.ToByte(eightBits, 2)); 
     } 
    } 
} 

उदाहरण:

string test = "0110011010010111001001110101011100110100001101101000011001010110001101101011"; 

foreach (var hexVal in test.ToHex()) 
{ 
    Console.WriteLine(hexVal); 
} 

प्रिंटों

06 
69 
72 
75 
73 
43 
68 
65 
63 
6B 
1

आप या बाद में और अगर आप BigInteger के लिए System.Numerics.dll (उपयोग करने के लिए तैयार हैं .NET 4.0 उपयोग कर रहे हैं कक्षा), निम्नलिखित समाधान ठीक काम करता है:

public static string ConvertBigBinaryToHex(string bigBinary) 
{ 
    BigInteger bigInt = BigInteger.Zero; 
    int exponent = 0; 

    for (int i = bigBinary.Length - 1; i >= 0; i--, exponent++) 
    { 
     if (bigBinary[i] == '1') 
      bigInt += BigInteger.Pow(2, exponent); 
    } 

    return bigInt.ToString("X"); 
} 
संबंधित मुद्दे