>>>>>>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 :-}
>
>
>haha - Well, at least you like the book - and it explores a few things
>
>
>I have the impression it can still be done in a shorter way - with lambda expressions - but I have not touched C# in 7 months
Maybe. Second bit can certainly be simpler:
string result = new string(GetChars(s1).ToArray());
Haven't had time to take a really good look at the Effective C# 2nd edition yet. Anyway, back to work ...........