Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Silly excersise
Message
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Titre:
Versions des environnements
Environment:
C# 2.0
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
MS SQL Server
Divers
Thread ID:
01500484
Message ID:
01500673
Vues:
41
>>>>>>>Hi All, just messing around - not a work thing - if I have a string of binary digits such as
>>>>>>>
>>>>>>>
>>>>>>>string s = "0101000001000101010101000100010101010010"
>>>>>>>
>>>>>>>
>>>>>>>how do I convert it to text ?, all the Convert.* methods I've looked at require a byte[] array as an arg and I don't know how to create one !
>>>>>>
>>>>>>Pete,
>>>>>>
>>>>>>I'm not sure whether it's the best way to go , and I have not tested it either, but
>>>>>>
>>>>>>(1) initialize a BitArray
>>>>>>(2) loop throught the string and assign the elements of the bitArray depending on 0 or 1
>>>>>>(3) initialize a Byte array
>>>>>>(4) I see that the BitARray has a CopyTo method wich accepts a Byte array
>>>>>>http://msdn.microsoft.com/en-us/library/system.collections.bitarray.copyto.aspx
>>>>>>
>>>>>>
>>>>>>Alternatively, you can directly create a byte array and loop through the string
>>>>>>
>>>>>>
>>>>>>if( string[stringindex] == '1' ) {
>>>>>>	the byte index = stringIndex / 8
>>>>>>	the bit to set =  7 - (stringIndex %8),
>>>>>>
>>>>>>	// you may have to cast the right hand side to (byte)
>>>>>>
>>>>>>	byteArray[ stringIndex / 8] |= ( 1 <<  (  7 - (stringIndex %8)))
>>>>>>
>>>>>>	or maybe due to widening
>>>>>>	byteArray[ stringIndex / 8]  = (byte)( byteArray[ stringIndex / 8]  | byteArray[ stringIndex / 8] | ( 1 <<  (  7 - (stringIndex %8))))
>>>>>>}
>>>>>>
>>>>>
>>>>>Hi Greg, thanks for your time - if you see my reply to Neil I can create the byte array but the ConvertToBase64String method returns rubbish. I read the M$ article and can't really see the point of BitArrays ? - maybe that's me :-(
>>>>
>>>>
>>>>(1) BitArray - was my first thought - not the best way
>>>>(2) ConvertToBase64String: I thought it was a binary string - base 64 encoding is something else
>>>>
>>>>(3) I see Viv has come up with a faster way
>>>
>>>Just to exercise my new found 'Effective C#' knowledge :-} :
static IEnumerable<char> GetChars(string s)
>>>   {
>>>        return Enumerable.Range(0, s.Length / 8).Select(i =>
>>>        Convert.ToChar(Convert.ToInt32(s.Substring(i * 8, 8),2)));
>>>    }
then
string result = string.Empty;
>>>foreach (char c in GetChars(s1))
>>>{
>>>     result += c;
>>> }
Nothing like making it complicated when simple would do :-}
>>
>>How about returning to the dark ages ?
>>
>>
>>using System;
>>using System.Collections.Generic;
>>using System.Linq;
>>using System.Text;
>>using System.Collections;
>>namespace BinaryToText
>>{
>>    class Program
>>    {
>>        static void Main(string[] args)
>>        {
>>            // PETER KANE
>>            string binarytext = "01010000010001010101010001000101010100100010000001001011010000010100111001000101";
>>          
>>            for (int i = 0; i < binarytext.Length; i+= 8)
>>            {
>>                Console.Write(Bin2Dec(binarytext.Substring(i, 8)));
>>            }
>>
>>            Console.WriteLine();
>>        }
>>
>>
>>        static char Bin2Dec(string binstr)
>>        {
>>            if(binstr.Trim().Length != 8)
>>                return ' ';
>>
>>            int retval = 0;
>>            int len = binstr.Length - 1 ;
>>            
>>            for (int i = 0; i <= binstr.Length - 1; i++)
>>                if (binstr[len - i] == '1')
>>                    retval += (int)Math.Pow((double)2, (double)i);
>>
>>            return((char)retval);
>>        }
>>    }
>>}
>>
>>
>Coffee break. Here's a method to do the reverse:
static string ConvertToBinaryString(string s)
>        {
>            char[] input = s.Reverse().ToArray();
>            char[] output = new char[input.Length * 8];
>            int pos = output.Length - 1;
>            for (int i = 0; i < input.Length; i++)
>            {
>                 for (byte i2 = 0; i2 < 8; i2++)
>                    output[pos--] = (input[i] & (1 << i2)) != 0 ? '1' : '0';
>            }
>            return new string(output);
>        }
You're showing off now bitshifting - maybe we should start a weekly competition for this sort of stuff - bit of light relief really and making us blow the dust off our brains - thanks again
Regards,
Peter J. Kane



Pete
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform