BinaryReader

This is a discussion on BinaryReader within the C# Programming forums, part of the General Programming Boards category; I'm trying to use the Read function, and I was wondering if it is possible to pass in and cast ...

  1. #1
    Registered User
    Join Date
    May 2006
    Posts
    35

    BinaryReader

    I'm trying to use the Read function, and I was wondering if it is possible to pass in and cast one of my own objects to a byte [] and read it into that structure directly.


    Basically I have a class with some properties, I initialize it and what not then I want to read it's contents from a binary file using the read function.

    So basically my class has some ints longs doubkes etc...all public

    then I want to

    file.Read((byte[])myclass, (int)file.BaseStream.Position, (int)Marshal.SizeOf(myclass));

    but the cast from myclass to byte[] fails.

  2. #2
    Registered User
    Join Date
    May 2006
    Posts
    35
    I get the same error in reverse direction too, so if I have byte[] myArray and class myClass

    myClass object = (myClass)myArray;

    the conversion from byte[] to myClass fails also.

  3. #3
    a_capitalist_story
    Join Date
    Dec 2007
    Posts
    2,655

  4. #4
    Registered User
    Join Date
    May 2006
    Posts
    35
    Quote Originally Posted by rags_to_riches View Post
    http://progtutorials.tripod.com/C_Sharp.htm

    thanks, but this is actually the solution I found after A LOT of searching...it wasn't really even in my Deitel C# book

    basically

    using System.Runtime.Serialization.Formatters.Binary;

    we can do things like

    myClass thing = new myClass();
    MemoryStream myClassMS= new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();

    if we want a bytes array from thing we do the following

    formatter.Serialize(myClassMS, thing);
    byte[] thingBytes = myClassMS.GetBuffer();

    and if we want to cast a myClass object to another type we can do this

    MemoryStream myClassMS2= new MemoryStream( thing);
    long[] longThings = (long[])formatter.Deserialize(myClassMS2);


    very useful when converting C or C++ code that uses pointer arithmetic to C# without changing a lot.

    I hope this can be usefull to someone else, I spent a lot of time looking for it.

  5. #5
    Registered User
    Join Date
    May 2006
    Posts
    35
    Ok, so the above doesn't work exactly as desired. The problem I ran into with this is that I already have the byte [] that I read in from the bin file. The code above only works if you have existing objects convert them to bytes and then cast them back or vice versa. I'm starting with bytes and need to get to my object type.

    If I can't resolve this elegantly using some C# bin tools, I'm going to be forced to create a function in my classes that takes an array of bytes, and manually maps them to each attribute of the class

  6. #6
    Registered User
    Join Date
    Apr 2008
    Posts
    1
    Hello

    Did you find easy way to fill structue or classes using Binary reader

    For now, I thing that the best is to write some native C function in a dll and call the dll passing pointers.

  7. #7
    Registered User
    Join Date
    Apr 2008
    Location
    USA
    Posts
    22

    Post

    C#, and more specifically the .Net Framework, provide allot of binary functionality and is a quite involved process as it is in any other language. An excellent place to start your research is definitively MSDN.

    The MSDN Express Edition is free and incorporates local help access as well as online help access giving you a one, two punch in your research on a .Net topic.

    As far as binary operations are concerned, .Net 3.x is going to allow allot more accessibility than previous versions of the framework by convention so an upgrade might be in order for those of you that have not already done so.

    The .Net Framework as it stands supports binary operations, but to what extent is the question and one that will not be answered until necessity beckins.

    In closing, do not paint yourself into a binary corner...have a back up plan!

    Develop your system prior to incorporating explicit binary operations and just update your system as new binary operations are added or discovered preventing hacks and workarounds muddying up your system and its code.

Popular pages Recent additions subscribe to a feed

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21